总结
-
观察者模式定义:
- 定义了对象之间的一对多的关系,这样一来,当一个对象发生改变时,它所有的依赖着都会被通知并自动更新。
出版者+订阅者=观察者
观察者模式和订阅报纸是一样的,只是名称不一样:出版者改为“主题”(Subject)订阅者改为“观察者”(Observer)
观察者模式的例子
WeatherData气象站
Subject是主题接口。
所有的气象站组件都要实现Observer接口,这样,在主题需要通知观察者时,有一个共同的接口。
布告板也建立一个共同的接口DisplayElement布告板只需要实现display()方法
布告板根据WeatherData对象显示当前观测值
三个设计原则
1.找出程序中会变化的部分,把它和会变化的部分分离
- 主题的状态回改变,观察者的数量也会改变,我们可以改变依赖主题的对象而不必改变主题
2.针对接口编程,而不是针对现实编程
- 主题和观察者都使用接口,观察者通过主题接口向主题注册,主题通过观察者接口通知观察者
3.多用组合,少用继承
- 观察者模式利用“组合”将观察者组合进主题中,对象间的这种关系不是同个继承产生的,而是在运行时利用组合产生的