发布订阅模式-或观察者模式
发布-订阅模式又叫观察者模式
观察者模式算是前端最常用的设计模式了,观察者模式概念很简单:观察者监听被观察者的变化,被观察者发生改变时,通知所有的观察者。
发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
在JavaScript中,我们一般用事件模型来替代传统的发布-订阅模式。
// 观察者
class Observer {
constructor(fn) {
this.update = fn
}
}
// 被观察者
class Subject {
constructor() {
this.observers = [] // 观察者队列
}
addObserver(observer) {
this.observers.push(observer)// 往观察者队列添加观察者
}
notify() { // 通知所有观察者,实际上是把观察者的update()都执行了一遍
this.observers.forEach(observer => {
observer.update()// 依次取出观察者,并执行观察者的update方法
})
}
}
var subject = new Subject() // 被观察者
const update = () => { console.log('被观察者发出通知') } // 收到广播时要执行的方法
var ob1 = new Observer(update) // 观察者1
var ob2 = new Observer(update) // 观察者2
subject.addObserver(ob1) // 观察者1订阅subject的通知
subject.addObserver(ob2) // 观察者2订阅subject的通知
subject.notify() // 发出广播,执行所有观察者的update方法