观察者模式
(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布
-订阅(
Publish/Subscribe)模式、模型
-视图(
Model/View)模式、源
-监听器(
Source/Listener)模式或从属者(
Dependents)模式。观察者模式是一种对象行为型模式。
观察者模式结构中通常包括观察目标和观察者两个继承层次结构:
观察者模式描述了如何建立对象与对象之间的依赖关系,以及如何构造满足这种需求的系统。
目标持有一个观察者集合,当产生某些行为时,通知所有的观察者。观察者收到通知做出相应的响应。这种模式成为:订阅-发布模式。为了降低目标和具体观察者间的耦合,可以在中间加入一个“平台”,目标通知平台,平台再分发消息。
观察者模式很常用、也很重要,JDK提供了对它的原生支持:
- Observable类:定义了一个Vector存储观察者。
- Observer接口:只声明一个方法void update(Observable o, Object args)
总结:
优点:
- 将行为的产生于响应隔离,降低耦合,同时可以实现灵活的一对多关系。
- 符合开闭原则,增加新的观察者无需修改原有代码;增加观察目标时,视情况而定。
- 观察目标很多的话,消耗时间
- 存在循环观察的可能
- 一个抽象模型有两个方面,一个方面依赖另一个方面,将他们分别独立开来
- 一个对象的改变会引发其他对象的改变,但并不知道都有谁、有多少
- 需要在系统建立一条触发链的时候