出版者+订阅者 = 观察者模式
定义: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。
-
观察者模式定义了对象之间一对多的关系。
-
主题(也就是观察者)用一个共同的接口来更新观察者
-
观察者和被观察者之间用松耦合(loosecoupling), 被观察者不知道观察者的细节,只知道观察者实现了观察者接口
ps: 两个对象之间松耦合,它们依然可以交互,但是不太清除彼此的细节。
因为对象之间的互相依赖降到了最低,松耦合的设计可以让我们建立有弹性的OO系统,应对变化 -
使用观察者模式时,被观察者推送数据(push)给观察者,或者观察者从被观察者处拉取数据(pull);常见的方式为第一种
-
有多个观察者时,不可以依赖特定的通知次序。
-
java有多种观察者模式的实现,包括java.util.Observable, Swing API 中 ;Swing 大量使用观察者模式,许多GUI框架也是如此
-
此模式也被应用到许多地方:JavaBeans、RMI
设计原则
- 找出程序中会变化的方面, 然后将其和固定不变的方面相互分离。
- 针对接口编程,不针对实现编程
- 多用组合少用继承, java.util.Obserable类违背了该原则。