场景

气象站:获取实际气象数据的物理装置
WeatherData对象:追踪气象站的数据,并更新布告板
布告板:显示目前天气状况给用户看

image.png
利用WeatherData获取数据并更新布告板:目前状况,气象统计,天气预报

WeatherData类

  1. getTempareture(); // 温度
  2. getHumidity(); //湿度
  3. getPressure(); // 气压
  4. measurementsChanged(); // 更新目前状况,气象统计,天气预报的布告板
  • 新的数据准备好的时候,measurementsChanged()被调用。一旦measure-mentsChanged()被调用,布告板马上更新。
  • 需要可以扩展,让其他开发人员定制布告板,用户可以随心所欲删除或者增加任何布告板。

错误示范

image.png
这是针对实现编程的,则以后增加或者删除布告板必须修改程序,耦合大。

观察者模式

topic负责管理数据,一旦主题内的数据改变,会通知观察者;
image.png

概念

定义了对象之间一对多的依赖,这样当一个对象改变状态时候,它的所有依赖者都会收到通知并自动更新。
image.png
image.png

观察者提供了一个抽象,让主题和观察者送耦合:主题只知道观察者实现了某个接口,不需要知道具体类是谁、做了些什么事或者其他细节。

主题不在乎别的,它只发送通知给所有实现了观察者接口的对象。

image.png

主题对象

image.png
实现注册、删除观察者和通知观察者

观察者接口

image.png

WeatherData实现主题接口

image.png