观察者模式和发布订阅模式简介

178 阅读2分钟

观察者模式和发布订阅模式简介

观察者模式

观察者模式是一种设计模式 当一个对象状态发生改变时,所有依赖他的对象都会收到通知

观察者模式拥有2个主体,分别是dep被观察者,跟watcher观察者

当被观察者产生需求发生变化的时候,通过notify去挨个通知观察者

Vue的底层逻辑就是,观察者模式搭配数据劫持,来完成数据驱动

发布订阅模式

发布订阅模式也是一种设计模式

发布订阅模式拥有3个主体,分别是发布者Publisher,中间媒介(事件通道),EventBus,跟订阅者Subscriber

发布订阅模式相比观察者模式多了个事件通道,事件通道作为调度中心,管理事件的订阅和发布工作,彻底隔绝了订阅者和发布者的依赖关系。即订阅者在订阅事件的时候,只关注事件本身,而不关心谁会发布这个事件;发布者在发布事件的时候,只关注事件本身,而不关心谁订阅了这个事件。

举个例子,组件之间的传值,通过借用$eventBus中间件(事件通道)让emit和on关联,并传值

两者的区别

从主体上看:

  • 观察者模式里,只有两个角色 —— 观察者 + 被观察者
  • 而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker

从耦合性上:

  • 观察者和被观察者,是耦合强的关系
  • 发布者和订阅者,则完全不存在耦合

从使用上讲:

  • 观察者模式,多用于单个应用内部
  • 发布订阅模式,则更多的是一种跨应用的模式(cross-application pattern),比如我们常用的消息中间件