设计模式 - 观察者
1. AbstractNotifier类(主题或抽象通知者类):一般用一个抽象类或接口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量 的观察者。抽象主题提供一个接口可以增加或删除观察者对象。
2. AbstractObserver类(抽象观察者类):为所有具体观察者定义一个接口,在得到主题的通知时更新自己。这个 接口叫做更新接口。抽象观察者一般用一个抽象类或接口实现。更新接口通常包括一个update方法,这个方法叫做更新方法。
3. ConcreteNotifier类(具体主题或通知者):将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
4. ConcreteObserver类(具体观察者):实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。具体观察者角色可以保存一个指向具体主题对象。具体观察者角色通常用一个具体子类实现。
5. 观察者模式的使用场合:
a: 当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时。
b: 当一个抽象模型有两个方面,其中一方面依赖于另一方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立的改变和复用。
c: 总的来说:观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。
demo如下:
1>,新建一个AbstractNotifier类,声明三个纯虚函数
2>,新建一个AbstractObserver类,声明一个write纯虚函数
3>,新建一个ConcreteNotifier类,这个类继承自AbstractObserver类,实现里面的三个纯虚函数
4>,新建一个ConcreteObserver类,继承自AbstractObserver类
5>,直接main函数里边