观察者模式通常也叫 发布-订阅 模式,或者事件监听模式,定义一对多的依赖关系,让多个观察者对象同时监听一个主题对象,如果这个主体对象的状态发生变化时,会通知所有的观察者对象。异步消息(MQ、ActiveMQ)都是基于这种模式。

类结构

observer

Subject:主题类,将所有的观察者对象保存在一个List集合中,并提供增、删方法,以及状态变化后的通知方法。

Observer:观察者的抽象接口,提供了一个抽象的动作方法,具体的业务由子类来实现。

ConcreteObserver:具体的观察者,负责实现自己的业务动作。

ConcreteSubject:具体的主题类,在内部状态发生变化时,给所有登记过的观察者发出通知。

优点

  • 解耦,将耦合的双方都依赖于抽象类,而不是依赖于具体。从而使得各自的变化不会影响到另一边的变化。

  • Observer采用的是抽象类,这样的好处是可以将多个子类相同的代码逻辑抽取出来,放到抽象类中。