实例:
观察者模式对于设计一个在Observer和Subject之间 一致的通讯模型很有用
当你可以将一个程序中的对象分为主题与观察者的时候,可以使用如下的观察者模式进行设计
观察者模式的典型交互
笔记:
一个主题可以有多个观察者
主题保持一个动态列表,记录已经注册的观察者
观察者模式工作方式
- 观察者必须注册自己
- 观察者必须通知观察者
- 观察者可以查询可观测对象的状态
通知观察者的两种策略
- 推模式**. **The push model(将观察者所需数据全部推给观察者
- 拉模式**.** The pull model(主题提供接口,供观察者访问
优点
- 可以动态添加观察者而不需要影响主题
- 当主题的状态或者逻辑发生变化的时候,观察者不受影响
何时使用观察者模式
- 一个对象的状态改变必须反映在另一个对象中,而你又不想让两个对象保持高耦合
- 你设计的框架将来需要添加许多观察者,而你希望以最小限度地改变程序
** java对观察者模式的支持
Java支持的观察者模式-典型交互
Observable/Observer**策略工作机制
- 被观察者可以将一个观察者添加到一个list.这也说明被观察者同意被该观察者观察。
- setChanged()和notifyObservers()将通知观察者主题对象的状态已经改变了,观察者对象的update()方法将自动运行。
- 在观察者对象的update()方法中,如果需要,可以调用被观察者中的相应方法,确切了解状态变化的细节。