最近项目需求需要做一个一份数据刷新多个界面,当有数据到来时,同时对注册的所有界面刷新,在经过考虑后引入了观察者模式,将需要刷新注册的界面做为观察者,数据Model被观察者。
下面对观察者模式的总结:
java.util.Observer 接口用来指定观察者,观察者必须实现 void update(Observable o, Object arg) 方法。
java.util.Observable 用来指定观察物(被观察者、可被观察的),并且提供了一系列的方法。这个class需要被观察物继承。
s
java.util.Observer 只有一个简单的方法 void update(Observable o, Object arg)
其中,参数 Observable o 用于指定触发 update 方法的对象, Object arg 用于指定触发 update 方法时候的附加参数。
下面给个简单的读者和出版商为例说明:
在代码里面很清楚的看到,当出版社出版杂志的时候,会主动的告知读者,读者就会订阅杂志,这也是一种主动推送的模式。
调用 notifyObservers() 的时候,被观察者将自己this传递给观察者,目的是为了让同一个观察者可以注册到不同的被观察者上面的,而传过来的 Oberverable o 其实可以用来检验到底是谁发过来的消息,根据观察者感兴趣的数据做自己独立的相应处理