观察者模式的理解

210 阅读1分钟
观察者模式被广泛运用于监听事件实现,也有的也成作发布订阅模式。

观察者的概念很简单,即观察者监听被观察者的变化,被观察者发生改变时,通知所有的观察。

//被观察者--目标
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()方法发出的通知后,执行一些逻辑。