一、概念
在 GoF 的《设计模式》中,它的定义如下:
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
大概意思就是:定义一个一对多的依赖关系,当依赖对象状态改变时,所有对其有依赖的对象会收到通知,自动进行相应更新。
在分类上,观察者模式属于行为型模式,主要用于处理类或对象之间的交互。
图和Demo网上很多,就不写了。
重点:
- 如何维护观察者和被观察者的关系
- 如何通知观察者
在实际的项目开发中,有各种不同的叫法,比如:Subject-Observer、Publisher-Subscriber、Producer-Consumer、EventEmitter-EventListener、Dispatcher-Listener。不管怎么称呼,只要应用场景符合定义,都可以看作观察者模式。
二、应用
小到代码设计,大到架构设计,如事件驱动模型,再或一些产品的设计思路,都使用了这种模式,如邮件订阅、RSS Feed、YouTube及抖音、新闻的关注更新。
在不同的应用场景和需求下,有不同的实现
- 有同步阻塞的,异步非阻塞的;
- 有进程内的实现,也有跨进程的实现,如RPC、消息队列;
- 有主动通知,有的是轮循
(一)、spring中的应用
由三部分组成
- ApplicationListener:观察者,做对应的业务处理;
- ApplicationEvent:事件,关联事件源、事件;
- ApplicationEventPublisher、ApplicationEventMulticaster:发布事件;