观察者模式被广泛运用于监听事件实现,也有的也成作发布订阅模式。
观察者的概念很简单,即观察者监听被观察者的变化,被观察者发生改变时,通知所有的观察。
//被观察者--目标
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方法被观察者有一个方法upate(),此刚方法的作用是,当接受到通知notify()方法发出的通知后,执行一些逻辑。