前言
观察者模式和发布/订阅模式很像,其区别主要在于,发布/订阅模式中发布者与订阅者双方没有感知。两者的区别可以抽象地理解租房子。观察者模式是自己找房东,两个人协商好生意就达成了。发布/订阅模式则是房东将租房信息挂在中介方,租房者也可以把自己的租房需求告知中介方。交易由中介方来促成。
观察者模式
var subject = {
observers: [],
notify() {
this.observers.forEach(observer =>{
observer.update()
})
},
attach (observer) {
this.observers.push(observer)
}
}
var observer = {
update(){
alert('updated')
}
};
subject.attach(observer);
subject.notify();
- 主体自行添加观察项;
- 主体自行发送通知。
发布/订阅模式
var subject = {
subscribes: [],
publish() {
this.subscribes.forEach(subscribe =>{
subscribe.update();
})
},
subscribe(sub) {
this.subscribes.push(sub)
}
};
var publisher = {
publish(subject) {
subject.publish()
}
};
var subscriber = {
update() {
console.log('update')
},
subscribe(subject) {
subject.subscribe(this);
}
}
subscriber.subscribe(subject)
publisher.publish(subject)
- subject 作为一个公共平台,提供订阅功能和发布功能;
- subscriber 订阅者自行订阅;
- publisher 发布者自行发布。