观察者模式

观察者模式

我们来举一个例子,用户去邮局订阅报纸的情形,用户作为subscriber ,邮局作为主题(subject), 用户订阅以后,可以定期收到订阅的报纸,除非用户取消。

观察者模式提供了一种对象设计,让主题和观察者之间松耦合

对于观察者,主题只知道观察者实现了某个接口(也就是Observer接口),主题是不需要知道观察者的具体类,以及他的任何细节。任何时候我们都可以增加新的观察者,因为主题唯一依赖的是实现Observer接口的对象列表。

观察者模式定义了对象之间的一对多依赖,当一个对象状态发生改变,他的所有依赖都会收到通知并自动更新

观察者模式_第1张图片
屏幕快照 2016-08-23 07.54.26.png

observer 拥有Subject 是为了以后取消注册用的

思考一个问题:
Observer 主动去拉数据好,还是被动接受好??

这里是一个既有主动拉,也有被动接收的例子

观察者模式_第2张图片
屏幕快照 2016-08-23 09.32.48.png

咱们来看看其实现

  1. 可观察者如何送出通知
    (1) 先调用setChange 标记状态已经改变
    (2)调用两中notifyObserver()其中一个
    notifyObserver()or notifyObserver(observerable,Object)

  2. 采用拉的方式获取数据
    在Obvserverable 中开放getter 方法

主题与观察者都是用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。两者之间运作正常,同时又具备松耦合的特点。

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