
观察者模式:
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 publisher = {
publish(pubsub) {
pubsub.publish()
}
}
var pubsub = {
subscribes: [],
publish() {
this.subscribes.forEach(subscribe =>{
subscribe.update();
})
},
subscribe(sub) {
this.subscribes.push(sub)
}
}
var subscribe = {
update() {
console.log('update')
},
subscribe(pubsub) {
pubsub.subscribe(this);
}
}
subscribe.subscribe(pubsub)
publisher.publish(pubsub)
订阅者,发布者,不直接沟通,中间通过事件中间者沟通。
区别与适用场景
总的来说,发布-订阅模式适合更复杂的场景。
在「一对多」的场景下,发布者的某次更新只想通知它的部分订阅者
在「多对一」或者「多对多」场景下。一个订阅者依赖于多个发布者,某个发布者更新后是否需要通知订阅者?还是等所有发布者都更新完毕再通知订阅者?