两种模式整体思想差不多,如果要说区别的话: 观察者模式中 观察者与被观察者之间是直接关联的,相互之间是知道对方的存在;发布订阅者模式中,发布者与订阅者之间是解耦的,他们之间是通过一个介质(往往是消息队列)进行代理。 观察者模式在应用中往往是同步的,当被观察者一旦有变化,观察者会立即做出响应;发布订阅者模式由于消息队列代理的存在,往往是异步的; 举个栗子:在 Vue 中,$on 与 $emit 或者 v-on 等事件监听就是发布订阅者模式,而在 ·、data 中通过 getter/setter 让模版能够响应数据变化就是一种观察者模式。
两种模式整体思想差不多,如果要说区别的话:
观察者模式中 观察者与被观察者之间是直接关联的,相互之间是知道对方的存在;
发布订阅者模式中,发布者与订阅者之间是解耦的,他们之间是通过一个介质(往往是消息队列)进行代理。
观察者模式在应用中往往是同步的,当被观察者一旦有变化,观察者会立即做出响应;
发布订阅者模式由于消息队列代理的存在,往往是异步的;
举个栗子:在 Vue 中,
$on
与$emit
或者v-on
等事件监听就是发布订阅者模式,而在 ·、data
中通过getter/setter
让模版能够响应数据变化就是一种观察者模式。