概述
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。这里改变的对象被称为主题(Subject)(也叫可观察者),它的依赖者称为观察者(Observer)。
类图
这里将会是观察者模式的类图(电脑没工具,明天加上去)。
需要注意的东西
- 观察者和主题之间是松耦合方式结合,即主题不知道观察者的具体实现,只知道观察者所实现的接口。
- 使用此模式时,你可以通过推(push)和拉(push)数据。(后面将会介绍)
- 有多个观察者时,不能依赖特定的次序。
- java中有多种观察者模式的实现(多种暂时没找到),比较通用的是java.util.Observer(观察者)和java.util.Observable(主题)。
需要注意的是,java.util.Observer是一个接口,而java.util.Observable是一个继承自Object的类。以下是jdk1.8中Observer和Observable的类图(此处后续加上类图):
public interface Observer{ void update(Observable o, Object arg) } public class Observable extends Object{ void addObserver(Observer o) protected void clearChanged() int countObservers() void deleteObserver(Observer o) void deleteObservers() boolean hasChanged() void notifyObservers() void notifyObservers(Object arg) protected void serChanged() }
推(push)和拉(push)数据
这里将会是推拉数据的介绍。
应用场景**
场景说明
以气象监测为例。其中包含三个部分是气象站(获取实际气象数据的物理装置)、WeatherData对象(追踪来自气象站的数据,并更新布告板)和布告板(显示目前天气状况给用户看)。以下将利用观察者模式去利用weatherData对象去获取数据并更新布告板。
类图设计
这里是类图设计。
代码实现
code
总结