观察者模式(Observer)发布、订阅模式

观察者模式定义了对象之间一对多的依赖关系,这样一来,当一个对象改变时,他的所有依赖者都会收到通知并自动更新。
 
模式中的角色

    1.抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象

    2.具体主题(ConcreteSubject):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。

    3.抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。

    4.具体观察者(ConcreteObserver)实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。

 

    

5.1 优点

为了交互对象之间的松耦合设计而努力。

观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽象,而不是依赖具体。从而使得各自的变化都不会影响另一边的变化。

5.2 缺点

依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者。

5.3 适用场景

5.3.1 当一个对象的改变需要给变其它对象时,而且它不知道具体有多少个对象有待改变时。

5.3.2 一个抽象某型有两个方面,当其中一个方面依赖于另一个方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用。

JAVA内置观察者模式(Observer接口和Observable类)

Observer:观察者

Observable:可观察者

原文地址:https://www.cnblogs.com/qingyuuu/p/5853451.html