1、本章的例子——气象站
气象站气象站会实时更新气象数据,我们需要将数据进行展示
-
数据一旦更新,气象站会有一个方法被调用
气象站更新数据方法 -
如果在measurementsChanged里更新数据,是面向实现编程的,而且和气象站的方法耦合
错误实现
2、观察者模式
定义了对象之间一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。
- 观察者实现一个接口,发布信息的主题实现一个接口
- 观察者可以组合到主题中,这样主题可调用观察者实现的统一的接口方法进行通知、更新。
- 主题是具有状态的对象,并且可以控制这些状态
- 所有展示数据的看板实现Observer和DisplayElement接口
-
气象站实现主题接口
改造之后的气象站 -
将所有观察者组合到气象站中,气象站调用notify方法,里面调用update就可通知所有观察者
气象站通知的方式
3、设计模式
为了交互对象之间的松耦合设计而努力
- 当两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此细节。
4、Java内置的观察者
java.util.Observer // 观察者 接口
java.util.Observable // 可观察者 类
- 继承这个类
- 调用setChanged()方法,标记状态已改变
- 调用notifyObservers() 或 notifyObservers(Object arg)
- 观察者把主题组合到自己类中 update(Observable o, Object arg)
观察者
网友评论