當對象間存在一對多關係時,好比,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式也叫作發佈訂閱模式。ui
觀察者模式中,被觀察者發生改變時,會自動通知全部觀察者對象。 促進造成鬆散耦合,並非一個對象調用另外一個對象,而是一個對象訂閱另外一個對象特定活動並在狀態改變以後獲得通知。這樣觀察者和被觀察者能夠單獨擴展和重用。this
通俗的理解觀察者模式就是:你不要動,我要有事就告訴你了。其中‘你’就是被觀察者,也能夠理解爲訂閱者。‘我’就是觀察者,也就是發佈者。 下面代碼的實現功能是,當Observer實例中value的值改變的時候,通知Subject實例告訴他value發生了變化,變成了多少。spa
//觀察者
class Observer {
constructor() {
this.arr = [];//收集被觀察者對象
this.value的值改變的時候,通知 = 1;//等待這個值更新時,觸發被觀察者的更新方法。
}
updateval() {//更新觀察者值的方法。
this.value = 100;
this.arr.forEach((s) => {
s.update(this.value);
})
}
save(s) {
this.arr.push(s);
}
}
//被觀察者
class Subject {
//被貫徹着會有一個更新的方法
update(value) {
console.log('觀察者更新了,值爲:' + value);
}
}
let subject = new Subject();//每個小的被觀察者
let observer = new Observer();//被觀察者實例
observer.save(subject);//訂閱
observer.save(subject);
observer.updateval();//發佈
複製代碼
具體流程以下:code