观察者模式和订阅-发布模式的区别
观察者模式:
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)
订阅者,发布者,不直接沟通,中间通过事件中间者沟通。
区别与适用场景
总的来说,发布-订阅模式适合更复杂的场景。
在「一对多」的场景下,发布者的某次更新只想通知它的部分订阅者
在「多对一」或者「多对多」场景下。一个订阅者依赖于多个发布者,某个发布者更新后是否需要通知订阅者?还是等所有发布者都更新完毕再通知订阅者?