7. 观察者(Observer)
Intent
定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态。
主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。
Class Diagram
主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。
观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。
Implementation
天气数据布告板会在天气信息发生改变时更新其内容,布告板有多个,并且在将来会继续增加。
1 | public interface Subject { |
1 | public class WeatherData implements Subject { |
1 | public interface Observer { |
1 | public class StatisticsDisplay implements Observer { |
1 | public class CurrentConditionsDisplay implements Observer { |
1 | public class WeatherStation { |
1 | CurrentConditionsDisplay.update: 0.0 0.0 0.0 |