[面试题] 观察者模式是怎样的?和发布订阅有什么区别?
📖 版块 A:知识讲解版 (温故知新)
-
观察者模式:
- 定义一种一对多的依赖关系。
- 当主题对象状态变化时,自动通知所有观察者。
- 核心组成通常包括 Subject、Observer、注册/通知机制。
-
适用场景:
- 一个对象变化,需要同步触发多个后续动作。
- 比如状态变化通知、监听器回调、事件机制。
-
和发布订阅的区别:
- 观察者模式通常更偏进程内直接依赖,主题知道观察者的存在。
- 发布订阅往往引入消息代理或事件总线,发布者和订阅者解耦更彻底。
- 发布订阅更容易扩展到跨进程、跨系统场景。
🎤 版块 B:面试实战版 (高手逐字稿)
Q:观察者模式是怎样的?和发布订阅有什么区别?
💬 高手逐字稿:
观察者模式的核心,是建立一种一对多通知关系。也就是说,一个主题对象状态一旦变化,就会自动通知所有依赖它的观察者。
最典型的结构通常有三部分:
- 一个主题对象;
- 一组观察者;
- 一套注册、取消注册、通知机制。
比如订单状态变化后,要同步通知积分系统、库存系统、消息系统,这就是很典型的观察者思路。
但观察者模式和发布订阅虽然很像,严格来说并不是一回事。
我觉得最核心的区别在于中间有没有额外代理层,以及解耦程度有多强。
在观察者模式里,主题通常还是知道观察者集合的,至少它知道自己要维护一组监听者,然后逐个通知。这种模式更偏进程内、对象级别的直接通知。
而发布订阅则通常会引入一个更中立的中间层,比如消息总线、事件中心、MQ。发布者把消息发给中间层,订阅者从中间层接消息,双方彼此甚至不需要知道对方是谁。所以发布订阅的解耦程度会更高,也更容易扩展到跨模块、跨服务、跨系统。
所以你可以把它们理解成:
- 观察者模式:更偏对象之间的直接通知关系;
- 发布订阅:更偏通过中间媒介做间接解耦。
最后更新于: