Day45【概念解析】观察者模式
目录 ▼
整理定义
中文名称:观察者模式/依赖模式/发布订阅模式
英文名称:observer pattern/dependents pattern/publish-subscribe pattern
复述展开
What is observer patter?
📌 观察者模式是一种行为设计模式,对象(主题)维护了一个依赖(观察者)列表,以便主题可以使用观察者定义的任何方法通知所有观察者它所发生的变化。
🌰*1
订阅杂志或者报纸,就是一种观察者模式。每次有新的一期杂志出现,就会邮寄到邮箱中。
🌰*2
股票市场也是观察者模式的一个大型场景
🌰*3
在分布式系统中实现事件服务
观察者模式结构

-
发布者 (Publisher) 会向其他对象发送值得关注的事件。 事件会在发布者自身状态改变或执行特定行为后发生。 发布者中包含一个允许新订阅者加入和当前订阅者离开列表的订阅构架。
-
当新事件发生时, 发送者会遍历订阅列表并调用每个订阅者对象的通知方法。 该方法是在订阅者接口中声明的。
-
订阅者 (Subscriber) 接口声明了通知接口。 在绝大多数情况下, 该接口仅包含一个 update更新方法。 该方法可以拥有多个参数, 使发布者能在更新时传递事件的详细信息。
-
具体订阅者 (Concrete Subscribers) 可以执行一些操作来回应发布者的通知。 所有具体订阅者类都实现了同样的接口, 因此发布者不需要与具体类相耦合。
-
订阅者通常需要一些上下文信息来正确地处理更新。 因此, 发布者通常会将一些上下文数据作为通知方法的参数进行传递。 发布者也可将自身作为参数进行传递, 使订阅者直接获取所需的数据。
-
客户端 (Client) 会分别创建发布者和订阅者对象, 然后为订阅者注册发布者更新。
优缺点
优点:
-
开闭原则。 你无需修改发布者代码就能引入新的订阅者类 (如果是发布者接口则可轻松引入发布者类)。
-
你可以在运行时建立对象之间的联系。
缺点:
- 订阅者的通知顺序是随机的。
理解体会
观察者模式,也就是发布订阅模式,经常用于分布式应用的场景下,一般可以通过消息队列来实现。
对象(主题)维护了一个依赖(观察者)列表,以便主题可以使用观察者定义的任何方法通知所有观察者它所发生的变化