Skip to content
2026-09-29 04:20271 字设计模式

观察者模式与发布-订阅模式 ​

两种处理一对多通知关系的模式,常被混淆但有关键区别。

观察者模式(Observer) ​

主题直接通知观察者,两者间存在直接依赖。

Subject ──直接调用──▶ Observer[]
  • Subject 维护观察者列表 addObserver / removeObserver / notify
  • 状态变化时调用每个 Observer 的 update()
  • 耦合:Subject 知道 Observer 接口

发布-订阅模式(Pub-Sub) ​

中间引入事件通道(Event Bus),发布者和订阅者完全解耦。

Publisher ──emit──▶ Event Channel ──dispatch──▶ Subscriber[]
  • Publisher 不知道谁接收
  • Subscriber 不知道谁发出
  • 支持多对多、消息过滤、异步投递

关键区别 ​

维度观察者Pub-Sub
耦合Subject 依赖 Observer完全解耦
通信直接同步调用通过事件通道
中介无Event Bus / Broker
典型例子DOM EventListenerVue EventBus、Redis Pub/Sub、MQTT

前端实践 ​

Vue 的响应式系统本质上是观察者(Dep → Watcher),Vue 3 的 emitter 和 React 的 EventEmitter 更接近 Pub-Sub。

每一篇文章,都是时间的标本