设计模式学习 - Observer Pattern

Observer Pattern (观察者模式、侦听器模式、订阅发布模式、模式-视图模式)适用于有需要通知的场景。当某些对象依赖于某个对象的某个状态,需要在这个对象到达某个状态时进行某些操作时,可将这些对象注册到需要监视的对象(主题)上,当这个对象(主题)到达某个状态时,主动通知这些对象,从而化主动为被动,使具体的观察者对象和要关注的主题解耦。下面一个普遍的结构图:

在 JDK 中,已经内置了 java.util.Observer 接口 和 java.util.Obserable 类。Observer 接口,就是观察者的抽象,定义了 update 操作。Obserable 类,则实现了观察者注册、删除和通知的逻辑,主题对象一般只要继承这个类即可。

观察者模式是一个很常用的模式,tomcat 中就大量使用了观察者。

尽管观察者模式一个比较简单的模式,但是我们在使用的过程中应该注意以下问题:
1,如果观察者对象太多,主题对象的通知操作可能会很慢,这时可能将通知过程做成异步或通过线程池进行管理,就像消息队列那样。
2,如果观察者对象之间的操作互有依赖,则通知时,可能会有操作混乱。