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

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

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

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

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

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

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

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

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

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

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

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

是么时候合适:

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

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

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

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

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

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

相关推荐
请你打开电视看看4 小时前
观察者模式
java·观察者模式·设计模式
loey_ln18 小时前
观察者模式和发布订阅模式
javascript·观察者模式·react.js
你好helloworld1 天前
设计模式之观察者模式
观察者模式·设计模式
zzzhpzhpzzz3 天前
设计模式——观察者模式
算法·观察者模式·设计模式
小白不太白9504 天前
设计模式之 观察者模式
观察者模式·设计模式
蓝田~4 天前
观察者模式和订阅模式
windows·观察者模式
Mr. zhihao8 天前
从业务场景学习观察者模式
学习·观察者模式
Mr. zhihao8 天前
观察者模式 vs 不使用观察者模式:商品库存变化的通知
java·观察者模式
zgy111122213 天前
高阶函数全解析(定义、应用 -- 函数柯理化 反柯理化 发布订阅模式 观察者模式)
观察者模式
杨充13 天前
13.观察者模式设计思想
java·redis·观察者模式