一、概念

在 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:发布事件;