一、观察者模式(Observer Pattern)
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
- 主题(Subject)和观察者(Observer)松耦合
- 主题唯一依赖的是一个实现Observer接口的对象列表
- Subject 和 Observer 类图
二、模式详解
用户需求:项目组刚收到了一份合约,负责建立A公司的下一代气象站,系统中有三个部分:
- 气象站(获取数据的物理装置)
- WeatherData对象(追踪来自气象站的数据,并更新布告板)
- 布告板(显示目前天气状况给用户看)(多种类型:状况、统计、天气预报等等)
需求分析:
- 新的测量数据输入时,measurementsChanged() 方法就会被调用,用户不在乎此方法是如何被调用的,只在乎它被调用了
- 项目组需要实现三个使用天气数据的布告板,一旦WeatherData有新的测量,这些布告必须马上更新
- 此系统必须可扩展,如果有新的类型的布告板,必须可扩展,同时这些布告板可随时删减
- 针对具体实现编程,在WeatherData里面添加具体实现,这样的话如果添加或删除布告板就要修改WeatherData代码,这样就很麻烦了,而这些具体实现可以用接口实现,即针对接口编程。
类图设计: