type
status
date
slug
summary
tags
category
icon
password
整理定义
中文名称:观察者模式/依赖模式/发布订阅模式
英文名称:observer pattern/dependents pattern/publish-subscribe pattern
出处 | 定义 |
中国大百科全书 | 一种设计模式。定义一个对象与其他对象之间的一对多的依赖关系,当一个对象改变状态时,所有与它有依赖关系的对象都被通知并自动更新。又称依赖模式、发布订阅模式。 |
设计模式 | 观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 |
百度百科 | 观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 |
维基百科 | 在软件设计和工程中,观察者模式是一种软件设计模式,其中称为主题的对象维护其依赖项(称为观察者)的列表,并通常通过调用其中一个方法来自动通知它们任何状态更改。 |
复述展开
What is observer patter?
观察者模式是一种行为设计模式,对象(主题)维护了一个依赖(观察者)列表,以便主题可以使用观察者定义的任何方法通知所有观察者它所发生的变化。
🌰*1
订阅杂志或者报纸,就是一种观察者模式。每次有新的一期杂志出现,就会邮寄到邮箱中。
🌰*2
股票市场也是观察者模式的一个大型场景
🌰*3
在分布式系统中实现事件服务
观察者模式结构
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fdea38628-64dc-40fd-8d17-2efa87e3d554%2F1edcbc56-66cc-4c3c-ab1b-25d963033158%2FUntitled.png?table=block&id=b10d4fe7-e080-47ae-a624-f9cf1b3c5212&t=b10d4fe7-e080-47ae-a624-f9cf1b3c5212&width=620&cache=v2)
- 发布者 (Publisher) 会向其他对象发送值得关注的事件。 事件会在发布者自身状态改变或执行特定行为后发生。 发布者中包含一个允许新订阅者加入和当前订阅者离开列表的订阅构架。
- 当新事件发生时, 发送者会遍历订阅列表并调用每个订阅者对象的通知方法。 该方法是在订阅者接口中声明的。
- 订阅者 (Subscriber) 接口声明了通知接口。 在绝大多数情况下, 该接口仅包含一个
update
更新方法。 该方法可以拥有多个参数, 使发布者能在更新时传递事件的详细信息。
- 具体订阅者 (Concrete Subscribers) 可以执行一些操作来回应发布者的通知。 所有具体订阅者类都实现了同样的接口, 因此发布者不需要与具体类相耦合。
- 订阅者通常需要一些上下文信息来正确地处理更新。 因此, 发布者通常会将一些上下文数据作为通知方法的参数进行传递。 发布者也可将自身作为参数进行传递, 使订阅者直接获取所需的数据。
- 客户端 (Client) 会分别创建发布者和订阅者对象, 然后为订阅者注册发布者更新。
优缺点
优点:
- 开闭原则。 你无需修改发布者代码就能引入新的订阅者类 (如果是发布者接口则可轻松引入发布者类)。
- 你可以在运行时建立对象之间的联系。
缺点:
- 订阅者的通知顺序是随机的。
理解体会
观察者模式,也就是发布订阅模式,经常用于分布式应用的场景下,一般可以通过消息队列来实现。
对象(主题)维护了一个依赖(观察者)列表,以便主题可以使用观察者定义的任何方法通知所有观察者它所发生的变化
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day45
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。