观察者模式
观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改时,所有依赖于它的 对象的都会得到通知,并且会自动更新,它其实就是观察者和被观察者之间的通信
观察者模式有一个别名叫做 发布订阅模式,就像你订阅了一份报纸,其他人也订阅了和你一样的报纸,当报社发布报纸时,订阅了这个报纸的人就能得到新报纸了
发布订阅模式
上面说过,发布订阅模式是观察者模式的一个别称,但 发布订阅 模式现在也越来越强大,组件独立于观察者模式了
在现在的 发布订阅 模式中,发布者的消息不会直接传给订阅者,它们之间有一个第三方,由这个第三方将消息 传给订阅者
观察者模式: 观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件。
发布订阅模式: 订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
发布订阅模式只是一种模式,具体的实现还是要我们自己根据实际情况去编写代码
const shop = {}; // 首先定义一个商铺
shop.list = []; // 定义商铺里的商品信息列表
shop.listen = function(fn) { // 添加订阅者
this.list.push(fn); // 将订阅的商品添加进入商品心里列表
}
shop.sell = function(){ //发布者
for( var i = 0, fn; fn = this.list[ i++ ]; ){
fn.apply( this, arguments ); // (2) // arguments 是发布消息参数
}
}
// 这是来了一个顾客询问手机的价格,那么
shop.listen(function(iphone, price) {
console.log('手机型号' + iphone);
console.log('价格' + price)
})
// 发布消息,本店卖IphoneX, 价格7000
shop.sell('IphoneX', 7000);
shop.sell('Iphone11', 9000);
// 输出 手机型号IphoneX, 价格7000
// 输出 手机型号Iphone11, 价格9000