我实际上对设计模式概念很陌生,并且正在尝试实现观察者模式。
我有一个 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/