设计模式(三)—— 发布-订阅模式

1. 发布订阅模式和观察者模式很相似,但并不等同

发布订阅模式是一种消息范式,消息发送者(发布者)不会将消息直接发送给特定的接受者(订阅者),而是将发布的消息分为不同的类别,通过一个中间的消息代理来调度消息,发布者无需了解有哪些订阅者存在。同样的,订阅者也只接受自己感兴趣的那一类消息,无需了解发布者是否存在。 发布者和订阅者都不知道彼此的存在,是完全的松耦合。

发布者(publishers)的消息不会直接发送给特定的接收者(订阅者)。

这里写图片描述

观察者模式中观察者和被观察是知道彼此的存在的,被观察者一直保持着对所有观察者的记录,被观察者发送通知消息时也是调用观察者的更新方法。因此“观察者”和“被观察者”是相互依赖的。

两者比较如下: 
这里写图片描述

总结一下二者的主要区别:

(1)观察者模式的被观察者和观察者之间是有依赖的,是紧耦合;发布-订阅模式的发布者和订阅者无直接依赖,通过消息代理进行通信,是松耦合的;
(2)观察者模式大多是同步的,而发布订阅模式大多是异步的;

(3)观察者模式需要在单个应用程序地址空间中实现,发布订阅是交叉应用模式

2. 发布-订阅模式具体实现

和观察者模式有些相似,只是把订阅者列表的维护和新消息通知的实现移到了消息管理器(就是发布者和订阅者中间的消息代理)中了。而且需要具体订阅者去订阅或取消订阅,就是将自己添加到通知列表里或从列表里删除。

有个写得不错的博客: java实现发布订阅

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
发布-订阅模式(Publish-Subscribe Pattern)具有以下特点和优势: 1. 解耦性:通过发布-订阅模式发布者和订阅者之间的关系被解耦。发布者不需要知道谁是订阅者,订阅者也不需要知道谁是发布者。这种解耦性使得系统中的组件可以独立地进行修改、扩展和重用。 2. 异步通信:发布-订阅模式通常采用异步通信方式,即发布者和订阅者之间不需要直接交互。这样可以提高系统的性能和响应速度,因为发布者不需要等待所有订阅者都处理完消息后才能继续执行。 3. 扩展性:发布-订阅模式支持动态添加和移除订阅者,以及新增主题和取消主题订阅的灵活性。这使得系统可以方便地进行扩展和改进,而不需要对已有的组件进行修改。 4. 消息传递机制:发布-订阅模式提供了一种灵活的消息传递机制。发布者可以将消息发送到指定的主题上,而订阅者可以选择订阅感兴趣的主题。这种机制使得系统中的不同组件可以通过消息进行通信,实现松耦合的架构。 5. 可靠性:发布-订阅模式可以提高系统的可靠性。当一个订阅者出现故障或无法处理消息时,不会影响其他订阅者的正常运行。系统可以容错地处理故障,确保消息的可靠传递。 6. 多对多通信:发布-订阅模式支持多对多的通信。一个发布者可以有多个订阅者,一个订阅者也可以订阅多个主题。这种多对多的通信方式能够满足复杂系统中不同组件之间的通信需求。 综上所述,发布-订阅模式具有解耦性、异步通信、扩展性、消息传递机制、可靠性和多对多通信等特点和优势,适用于需要实现解耦和异步通信的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值