观察者模式
我们来举一个例子,用户去邮局订阅报纸的情形,用户作为subscriber ,邮局作为主题(subject), 用户订阅以后,可以定期收到订阅的报纸,除非用户取消。
观察者模式提供了一种对象设计,让主题和观察者之间松耦合
对于观察者,主题只知道观察者实现了某个接口(也就是Observer接口),主题是不需要知道观察者的具体类,以及他的任何细节。任何时候我们都可以增加新的观察者,因为主题唯一依赖的是实现Observer接口的对象列表。
观察者模式定义了对象之间的一对多依赖,当一个对象状态发生改变,他的所有依赖都会收到通知并自动更新
observer 拥有Subject 是为了以后取消注册用的
思考一个问题:
Observer 主动去拉数据好,还是被动接受好??
这里是一个既有主动拉,也有被动接收的例子
咱们来看看其实现
可观察者如何送出通知
(1) 先调用setChange 标记状态已经改变
(2)调用两中notifyObserver()其中一个
notifyObserver()
ornotifyObserver(observerable,Object)
采用拉的方式获取数据
在Obvserverable 中开放getter 方法
主题与观察者都是用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。两者之间运作正常,同时又具备松耦合的特点。