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

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

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

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

这里写图片描述

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

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

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

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

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

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

和观察者模式有些相似,只是把订阅者列表的维护和新消息通知的实现移到了消息管理器(就是发布者和订阅者中间的消息代理)中了。

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

猜你喜欢

转载自blog.csdn.net/u012216131/article/details/84881678
今日推荐