观察者模式(Observer)

1.定义

定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

2.结构说明

Subject:目标对象,通常具有如下功能。

一个目标可以被多个观察者观察

目标提供对观察者注册和退订的维护

当目标的状态发生变化时,目标负责通知所有注册的、有效的观察者

Observer:定义观察者的接口,提供目标通知时对应的更新方法,这个更新方法进行相应的业务处理,可以再这个方法里面回到目标对象,以获取目标对象的数据

ConcreteSubject: 具体的目标实现对象,用来维护目标状态,当目标对象的状态发生改变时,通知所有注册的,有效的观察者,让观察者执行相应的处理。

ConcreteObserver:观察者的具体实现对象,用来接收目标的通知,并进行相应的后续处理。

3.单向依赖

观察者依赖于目标,但是目标不依赖于观察者

4.触发通知的时机

早实现观察者模式的时候,一定要注意触发通知的时机。一般情况下,是在完成了状态维护后触发,因为通知会传递数据,不能够先通知后该数据,这很容易出问题,会导致观察者和目标对象的状态不一致。

5.相互观察

如果出现相互观察,避免出现死循环

6.观察者模式的推拉模型

推模型:目标对象主动向观察者推动目标的详细信息

拉模型:目标动向在通知观察者的时候,只传递少量信息,如果观察者需要更具体的信息可以通过读取目标对象中获取。

7.java中实现观察者

Observable接口,实现Subject的功能

Observer接口,实现Water的功能

8.本质

触发联动

9.相关模式

状态模式

中介者模式

 

posted on 2016-08-09 22:42  zhaojunyang  阅读(385)  评论(0)    收藏  举报

导航