观察者模式
观察者模式,我们仅仅维护一个可观察者对象即可,即一个 Observable 实例。当有数据变更时,它只需维护一套观察者(Observer)的集合,这些 Observer 实现相同的接口,Subject只需要知道通知 Observer 时,需要调用哪个统一方法就好。
代码示例:
var subject = {
observable: [],
notify() {
this.observable.forEach(observer => {
observer.update()
})
},
attach(observer) {
this.observable.push(observer)
}
}
var observer = {
update() {
console.log('update');
}
}
subject.attach(observer)
subject.notify()
发布订阅模式
在发布订阅模式里,发布者,并不会直接通知订阅者。换句话说,发布者和订阅者,彼此互不相识,他们通过第三者触发,也就是在消息队列里面。发布者和订阅者通过事件名来联系,匹配上后直接执行对应订阅者的方法即可。
代码实例:
var publisher = {
publish(pubsub) {
pubsub.publish()
}
}
var pubsub = {
subscribes: [],
publish() {
this.subscribes.forEach(sub => {
sub.update()
})
},
subscirbe(sub) {
this.subscribes.push(sub)
}
}
var subscribe = {
update() {
console.log('update');
},
subscribe(pubsub) {
pubsub.subscirbe(this)
}
}
subscribe.subscribe(pubsub)
publisher.publish(pubsub)