发布订阅模式:观察者模式的一种变体

2024-02-23 20:28

本文主要是介绍发布订阅模式:观察者模式的一种变体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发布-订阅模型(Publish-Subscribe Model)的底层机制通常基于观察者模式。

发布-订阅模型是观察者模式的一种变体。

在观察者模式中,主题(或被观察者)维护了一组观察者,当主题的状态发生变化时,观察者会被通知并执行相应的更新操作。发布-订阅模型扩展了这个思想,引入了一个称为消息代理或事件通道的中介,允许发布者发布消息(事件)到通道,而订阅者则通过订阅这个通道来接收消息。

发布订阅和观察者的区别:

  1. 发布订阅模式引入一个消息通道中介,发布者发布到通道,订阅者通过订阅这个通道来接收消息。
  2. 订阅者可以订阅多个消息通道,发布者可以在多个通道发送消息。
  3. 发布订阅模式由通道将消息推送给订阅者。
    在这里插入图片描述

什么时候不合适用发布者订阅者模式:

少量订阅者: 如果你的程序只有很少的订阅者,而且它们之间的关系相对简单,引入发布/订阅模式可能显得过于复杂。在这种情况下,直接的调用或其他简单的通信方式可能更加合适。

实时交互: 如果你的系统需要与子系统进行实时的同步交互,而不是通过异步的事件通知,那么发布/订阅模式可能不是最佳选择。在实时交互的场景中,直接的方法调用或请求-响应模式可能更为合适。

复杂性超出需要: 发布/订阅模式引入了一定的复杂性,特别是在处理订阅和发布的中介机制时。如果你的应用程序相对简单,且没有复杂的通信需求,那么引入这样的模式可能显得不必要。

高频率的消息通信: 如果你的系统要求高频率的消息通信,而且消息的发布和订阅操作开销较大,那么可能需要考虑其他更为高效的通信机制,以避免性能问题。

单一应用内部通信: 如果你的应用程序是一个单一的、独立的应用,而且内部组件之间的通信相对简单,那么引入发布/订阅模式可能显得过度。

是么时候合适:

广播信息给大量消费者: 如果你的应用程序需要向大量的消费者广播信息,例如微信订阅号向订阅者广播消息,发布/订阅模式是一种适用的模式。它允许消息的发布者将信息发送给所有订阅者,而不需要知道具体有多少订阅者。

多个独立应用程序或服务通信: 当应用程序需要与独立开发的应用程序或服务通信,尤其是这些应用程序可能使用不同的平台、编程语言和通信协议时,发布/订阅模式提供了一种解耦的方式,让它们能够独立演进而不影响彼此。

非实时响应: 如果应用程序需要向消费者发送信息,而不需要实时响应,发布/订阅模式是一种合适的选择。消费者可以异步地处理它们接收到的信息,而不会阻塞发布者。

集成系统最终一致性: 如果系统被设计为支持最终一致性模型,即允许一段时间内的不一致,发布/订阅模式可以满足这种设计要求。每个订阅者在自己的时间表上处理消息,而不需要实时一致性。

满足不同可用性和运行时间计划的消费者: 如果需要将信息传递给多个消费者,并且这些消费者具有不同的可用性要求或正常运行时间计划,发布/订阅模式提供了一种异步的方式来满足这些不同的需求。

使用消息中间件是发布/订阅模式的一种常见选择,而不是手动实现整个机制。

这篇关于发布订阅模式:观察者模式的一种变体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739831

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大