目标与观察者之间的关系
目标与观察者之间的关系可以是一对一、一对多、多对一。
单向依赖
观察者和目标是单向依赖的关系,只有观察者依赖目标,而不是目标依赖观察者,观察者是被动的,目标是主动的。
命名建议
- 目标接口的定义,建议在名称后面跟Subject;
- 观察者接口的定义,建议在名称后面跟Observer;
- 观察者接口的更新方法,建议名称为update,参数的个数及类型不受限制。
触发通知的时机
一般情况是在完成目标对象的状态维护后触发通知,因为通知会传递数据,不能够先通知再改变数据。比如之前的代码,先设置天气内容,再通知所有的订阅的人:
1 | public class ConcreteWeatherSubject extends WeatherSubject { |
观察者模式的调用顺序示意图
观察者模式的调用顺序(准备阶段)
观察者模式的调用顺序(运行阶段)
通知的顺序
多个观察者之间的通知顺序是不确定的,彼此之间是平行的,观察者之间不应该有相互依赖的关系。
参考资料:
GerryZhang 认识观察者模式