这两天面试问到了这个问题,下来就重点学习了一下
1.观察者模式:
在软件设计中是一个对象,维护一个依赖列表,当任何状态发生改变自动通知它们。
举个例子:
假设我正在找一份软件工程师的工作,对“XX公司”很感兴趣。所以我就联系了他们的HR,给了他我的联系电话。他保证如果有任何职位空缺都会通知你。这里还有几个候选人也你一样很感兴趣。所以职位空缺大家都会知道,如果你回应了他们的通知,他们就会联系你面试。
所以,以上和“观察者模式”有什么关系呢?这里的“香蕉公司”就是
Subject
,用来维护
Observers
(和你一样的候选人),为某些
event
(比如职位空缺)来
通知(notify)
观察者。
2.发布/订阅模式:
订阅者把自己想订阅的事件注册到调度中心,当该事件触发时候,发布者发布该事件到调度中心(顺带上下文),由调度中心统一调度订阅者注册到调度中心的处理代码。
总结
1. 从两张图片可以看到,最大的区别是调度的地方。
虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者),但是
观察者模式
是由具体目标调度的,而
发布/订阅模式
是统一由调度中心调的,所以
观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。
2.在
观察者
模式中,观察者是知道Subject的,Subject一直保持对观察者进行记录。然而,在
发布订阅
模式中,发布者和订阅者