一、定义
当对象存在一对多的依赖关系,使得每当一的对象改变时,所有依赖它的多个对象都会得到通知并自动更新。
二、例子
报社和用户。用户向报社订阅报纸,报社出版新报纸后向用户送去。当用户取消订阅,报社会停止运送。只要报社营业,就会有用户订阅或者取消订阅报纸。
三、结构
代码实现:
抽象主题与抽象观察者
具体主题与具体观察者
测试
测试结果
四、优点
1、观察者和被观察者是抽象耦合的。
2、建立一套触发机制。
五、缺点
1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。
3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。