发布订阅者模式和观察者模式的相同点和不同点
时间: 2024-01-02 09:09:32 浏览: 29
发布订阅者模式和观察者模式都是用于处理对象之间的通信,两者有相同点也有不同点。
相同点:
1. 都是用于对象之间的通信,实现解耦。
2. 都是基于事件的通信机制,当一个对象发生了某个事件时,通知其他对象进行相应的处理。
3. 都可以实现一对多的通信方式。
不同点:
1. 观察者模式中,被观察者对象直接通知观察者对象,而发布订阅者模式中,发布者对象和订阅者对象通过消息代理进行通信,发布者对象不直接通知订阅者对象。
2. 观察者模式中,观察者对象必须知道被观察者对象的存在,而发布订阅者模式中,发布者对象和订阅者对象不需要知道对方的存在,它们只需要知道消息代理即可。
3. 在观察者模式中,观察者对象只有一个或者少数几个,而在发布订阅者模式中,可以有多个订阅者对象。
4. 观察者模式是同步的,被观察者对象发生变化时,观察者对象立即得到通知;而在发布订阅者模式中,消息代理是异步的,发布者对象发送消息后,不会立即得到订阅者对象的响应。
相关问题
观察者模式和发布订阅模式区别
观察者模式和发布订阅模式都是用于处理对象间的一对多关系,但它们有一些不同之处。
观察者模式中,有一个主题和多个观察者。主题维护一个观察者列表,并在状态变化时通知所有观察者。观察者通过注册到主题中来接收通知。观察者模式中,观察者知道主题,并直接从主题中接收通知。
发布订阅模式中,有一个消息代理或者称为消息中心,发布者向消息代理发布消息,订阅者从消息代理订阅消息。发布订阅模式中,发布者和订阅者互不知晓,他们只知道消息代理。发布者向消息代理发布消息,而不必知道哪些订阅者会收到该消息。同样地,订阅者也只需向消息代理订阅消息,而不必知道哪些发布者会发布该消息。
因此,观察者模式和发布订阅模式在实现方式上有所不同,前者更加简单,后者更加灵活。当需要简单的一对多关系时可以使用观察者模式,而当需要更加复杂的场景时可以选择发布订阅模式。
订阅发布模式和观察者
模式有什么区别?它们的应用场景有哪些?
回答: 订阅发布模式和观察者模式在原理上是相似的,都是建立了一种对象间的依赖关系,当被观察者或发布者的状态发生变化时,观察者或订阅者会得到通知并进行相应的更新。\[1\]区别在于订阅发布模式中存在一个订阅中心,而观察者模式中没有。在订阅发布模式中,发布者和订阅者之间互不干扰,由调度中心进行处理,实现了解耦和更细粒度的控制。\[2\]\[3\]观察者模式则更加简单直接,没有中间的调度中心。
这两种模式的应用场景也有一些差异。观察者模式适用于一对多的场景,当一个对象的状态变化需要通知多个观察者时,可以使用观察者模式。而订阅发布模式适用于多对多的场景,当多个发布者和多个订阅者之间存在复杂的依赖关系时,可以使用订阅发布模式。\[3\]此外,订阅发布模式还可以实现一些细粒度的控制,比如权限控制和节流操作。
#### 引用[.reference_title]
- *1* *2* [观察者模式和发布订阅模式](https://blog.csdn.net/weixin_50290816/article/details/128379200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [发布订阅模式与观察者模式](https://blog.csdn.net/hf872914334/article/details/88899326)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)