定义
在对象之间定义了一对多的依赖,当一个对象改变状态,依赖它的对象都会受到通知,并自动更新。
Java中的观察者模式
Java.until.Observable
swing 中GUI框架。
JavaBeans、RMI
设计原则
封装变化,分离变化与固定不变的方面
针对接口编程,不针对实现编程
多用组合,少用继承
松耦合
当两个对象之间松耦合,它们之间可以交互,但是不清楚彼此的细节。
观察者模式提供了一种对象设计,让主题和观察者之间松耦合。
改变主题或观察者其中一方,都不会影响另一方。
spring监听机制——观察者模式的应用
- 事件,需要继承ApplicationEvent,即观察者模式中的”主题”,可以看做一个普通的bean类,用于保存在事件监听器的业务逻辑中需要的一些字段;
2. 事件监听器,需要实现ApplicationListener,即观察者模式中的”观察者”,在主题发生变化时收到通知,并作出相应的更新,加泛型表示只监听某种类型的事件;
3. 事件发布器,需要实现ApplicationEventPublisherAware,获取spring底层组件ApplicationEventPublisher,并调用其方法发布事件,即”通知”观察者。
观察者模式 vs 发布订阅模式
https://zhuanlan.zhihu.com/p/51357583


从表面上看:
- 观察者模式里,只有两个角色 —— 观察者 + 被观察者
- 而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker
往更深层次讲:
- 观察者和被观察者,是松耦合的关系
- 发布者和订阅者,则完全不存在耦合
