定义:
观察者模式定义了一个一对多的依赖关系,让一个或者多个观察者对象监听一个主题对象。主题对象的状态发生变化,能够通知所有依赖与此对象的观察者对象,使观察者对象能够自动更新。
观察者模式是对象的行为模式。又称发表订阅模式(publish/subscribe)、模型-视图模式(model/view)。
观察者模式的结构:
image.png
- 抽象主题角色Subject 保存了所有的观察者对象的引用
- 抽象观察者角色Observer
- 具体主题ConcreteSubject
- 具体观察者ConcreteObserver
观察者模式的优缺点:
优点
- 观察者和被观察者之间是抽象的耦合,被观察者只是知道一个具体观察者的列表,每个具体观察者都符合一个抽象观察者的接口。
- 支持广播通信,被观察者会向所有登记过的观察者发出通知。
缺点
- 观察者过多,通知比较耗时
- 观察者和被观察者之间有循环依赖,会导致系统崩溃
- 如果是通知是异步的话,必须保证投递是以自洽的方式进行
- 观察者不知道被观察者是怎么样发生变化的。
网友评论