观察者模式(Observer)

特征

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

一对多的关系关联

主题是具有状态的对象,并且可以控制这些状态。有“一个”具有状态的主题,观察者使用这些状态,虽然这些状态不属于他们。

依赖如何产生

因为主题真正拥有数据的人,观察者是主题的依赖者,在数据变化时更新,这样比起让许多对象控制同一份数据来,可以得到更干净的OO设计。

设计思考

被观察者肯定不是一个,而且被观察者都有注册、注销、通知(所有的观察者更新数据)三个功能,那么被观察者可以抽出一个接口,同时被观察者一定要有记录注册信息的field;观察者一定要有一个可被被观察者调用的update方法,以便更新数据。

主要流程是现在先有一个被观察者(无论出报纸还是杂志或者其他),然后这个有一个观察者(人),当两者都具备之后,开始交互:

  • 观察者调用被观察者的注册方法
  • 被观察者自身数据改变时,会遍历自己内部记录的注册过的观察者的更新数据方法,通知观察者更新数据。
  1. 被观察者设计


    观察者模式(Observer)_第1张图片
    image.png
  2. 观察者设计


    观察者模式(Observer)_第2张图片
    image.png

Java内置的观察者模式

由于注册、注销、通知这3个方法逻辑基本一样,同样还有一个保存注册的观察者的field,所以Java就提供了一个类java.util.Observable;对于观察者提供了一个接口java.util.Observer;以供开发人员使用。

你可能感兴趣的:(观察者模式(Observer))