Skip to content

Latest commit

 

History

History
37 lines (21 loc) · 1.65 KB

037.Vue使用的是【观察者】模式?还是【发布-订阅】模式?这两种模式有什么区别.md

File metadata and controls

37 lines (21 loc) · 1.65 KB

Vue使用的是【观察者】模式?还是【发布-订阅】模式?这两种模式有什么区别

此题是在一次头条面试中被问到的,网上关于Vue双向绑定原理解释的有很多,说是【发布-订阅】的有;说是【观察者】的也有。

其实是哪种模式并没有那么重要,但真的遇到"较真的"面试官,还是要好好应对一下的。

结论

Vue使用的是观察者模式

原因(两种模式的区别)

发布订阅模式是一种解耦的设计模式,发布者与订阅者没有直接的接触,中间有一层"经纪人"。

而Vue中,每个数据为了做依赖收集将每个数据设定了一个Watcher对象,即没有中间层。

此外,严格的发布订阅模式下,发布者只管发布给"经纪人",订阅者去"经纪人"那里去订阅自己关心的消息(这个很像Kafka),所以发布订阅模式中会存在一个消息队列。Vue中并没有这个消息队列。

从表面上看:

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

往更深层次讲:

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

从使用层面上讲:

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

参考文章