java - 我可以使用什么来代替 "this"作为传递参数?

标签 java design-patterns observer-pattern

我实际上对设计模式概念很陌生,并且正在尝试实现观察者模式。

我有一个 Blog 类,它通知观察者新的更改。它实现了主题接口(interface)。它有一个用于添加新观察者的 registerObserver 方法。另一方面,我有针对不同类型观察者的类,它们都实现了 Observer 接口(interface)。

我希望在观察者类中有一个 Register 方法和一个 Unsubscribe 方法,以便它们可以选择何时添加和删除。但是,当我使用我在此处编写的代码时,我在运行时收到空指针异常错误,这显然是由于 blog.registerObserver(this) 行所致。

为了实现注册和取消订阅方法,我还有哪些其他选项?

public void registerObserver( Observer o) //when an observer resgiters we add 
                                          // it to the end of the list
{
    observers.add(o);
}

观察者是一个接口(interface),客户端类实现它。现在我有一个 ClientForMusic 类:

public class ClientForMusic implements Observer, DisplayElement {

private String Music;
private Subject blog;
public ClientForMusic()
{}

public void Register (Subject Blog)
{
   this.blog=blog;
   blog.registerObserver(this);  
}

public void Unsubscribe(Subject Blog)
{
    this.blog=blog;
    blog.removeObserver(this);
}


public void update(String music, String movie, String news, String science )
{
    this.Music= music;
    display();
}

public void display()
{
     System.out.println("I have been notified of a new song:" + Music);
}
}

最佳答案

您的方法注册和取消订阅接收博客作为参数似乎很奇怪。您需要在 Observer 的构造函数中实例化您的博客,或者在您的 Observer 中使用一个 setter 方法来获取您的博客。或者至少如果您想通过方法寄存器传递它,则保留它。取消订阅方法应该使用与注册时使用的博客相同的实例。如果您将 null 值传递给注册或取消订阅方法,则可能会发生 NPE。否则你的代码看起来没问题

关于java - 我可以使用什么来代替 "this"作为传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35345016/

相关文章:

java - 抽象工厂设计模式和泛型 - Java

soa - 最佳发布/订阅 "Middleware"

java - 如果没有观察者和主体的接口(interface),它仍然是观察者模式吗?这是一个我不确定的例子

java - 如果不为 true 则重新分配 boolean 值

java - 使用 yandex api 的 Android 翻译应用程序在模拟器 TextView 中显示结果,但在真实设备中不显示

javascript - 高级 JavaScript/JQuery 设计模式

java - 使用枚举版本单例模式时,修改单例类代码是扩展单例功能的唯一方法吗?

java - 自定义列表上的二进制搜索 - android

java - 如何将类中的所有信息存储到单个文本文件中?

ruby-on-rails - 在 rake 任务期间关闭观察者的简单方法?