场景
气象站:获取实际气象数据的物理装置
WeatherData对象:追踪气象站的数据,并更新布告板
布告板:显示目前天气状况给用户看
利用WeatherData获取数据并更新布告板:目前状况,气象统计,天气预报
WeatherData类
getTempareture(); // 温度
getHumidity(); //湿度
getPressure(); // 气压
measurementsChanged(); // 更新目前状况,气象统计,天气预报的布告板
- 新的数据准备好的时候,measurementsChanged()被调用。一旦measure-mentsChanged()被调用,布告板马上更新。
- 需要可以扩展,让其他开发人员定制布告板,用户可以随心所欲删除或者增加任何布告板。
错误示范
这是针对实现编程的,则以后增加或者删除布告板必须修改程序,耦合大。
观察者模式
topic负责管理数据,一旦主题内的数据改变,会通知观察者;
概念
定义了对象之间一对多的依赖,这样当一个对象改变状态时候,它的所有依赖者都会收到通知并自动更新。
观察者提供了一个抽象,让主题和观察者送耦合:主题只知道观察者实现了某个接口,不需要知道具体类是谁、做了些什么事或者其他细节。
主题不在乎别的,它只发送通知给所有实现了观察者接口的对象。
主题对象
实现注册、删除观察者和通知观察者