我试图绕过在解释 update() 调用时涉及的丑陋条件转换,该调用将要通知其观察者多种类型的事件。另外,我不希望将标志传递给 notifyObservers()/update() 方法。
我不希望观察者必须轮询可观察对象以找出发生了什么变化,我希望通过 update() 方法(或类似方法)将这些新数据提供给观察者。
我有一个解决方案的想法。我为每种类型的通知实例化一个可观察对象。例如: observable 是一个表示硬件设备的对象,它将包含表示其状态的 observable:
public final Observable connectionState = new Observable();
public final Observable dataState = new Observable ();
这样,观察者不需要进行任何类型的查询或条件转换,因为一个观察者,即每个通知类型可以使用一个覆盖的 update() 方法。
在经历了很多挫折之后,这是我能想到的最优雅的解决方案,但是我有一种可怕的感觉,我错过了如何正确使用 Observers/Observables 的要点。
我对该解决方案的主要问题是:
- 它仍然涉及演员(至少它不是有条件的)
- 由于可观察对象需要是可观察的,因此它们必须是公共成员。虽然这确实允许观察者调用 addObservable(),但它也允许他们调用 notifyObservers()。
我在做正确的事吗?
谢谢