【发布时间】:2015-09-12 06:32:05
【问题描述】:
在研究观察者模式时 Observer 接口有更新方法:
public void update(Observable obs, Object obj)
第一个参数是发出update()方法的观察者,但是我看不懂第二个参数Object obj。 Oracle 文档将其声明为:
arg - 传递给 notifyObservers 方法的参数。
如果我尝试打印它,java会抛出NPE,如果它为null有什么用?
【问题讨论】:
-
通过传递给docs.oracle.com/javase/7/docs/api/java/util/… 的内容调用它。但实际上,这些 Observable/Observer 类是 Java 早期设计糟糕的遗物,没有人使用。你最好忘记他们的存在。
-
哦,如果它们已被弃用且过时,您能建议我使用更新更好的方法来完成相同的任务吗?
-
定义一个接口(如 FooBarListener),当您的 FooBar 想要通知更改时调用回调方法。将方法 addFooBarListener() 和 removeFooBarListener() 添加到您的 FooBar 类。将侦听器存储在列表中。列表上的迭代器,并在需要时调用回调方法。或者,如果它们适合,则使用现有的 JavaBean 机制之一,例如 PropertyChangeListener/PropertyChangeSupport。在不了解用例的情况下很难给出最佳答案。
标签: java design-patterns