用途
定义对象间的一种一对多的依赖关系,当一个发布者对象的状态发生改变时,所有依赖于它的观察者对象都得到通知并被自动更新。
要素
- Subject:被观察者接口,提供注册和删除观察者的接口。
- ConcreteSubject:被观察者实现类,包含一个对应观察者列表。状态改变时,调用各个观察者的更新方法。
- Observer:观察者接口,提供一个更新自身的操作。
- ConcreteObserver:观察者实现类。
- 示例图:

优缺点
- 观察者和被观察者抽象耦合
- 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
- 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃
- 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化
