理解设计模式(十九)——观察者模式

观察者模式

提出问题

当一个对象需要将一个通知发送给若干个对象的时候,该怎么办呢?一个办法是让若干个对象不断去询问这一个对象,有没有新的通知?也就是采用轮询的方法。但是这样显然过于消耗系统资源。最好是能让这一个对象有新通知的时候自动告诉其他的若干个对象。这就是观察者模式

解决问题

所以,所谓观察者模式,说的是若干个对象观察某一个对象。如果某一个对象发生了变化,其他的若干个对象都能知道。但是程序实现上并不是若干个对象去观察的这一个对象。而是这一个对象主动通知若干个对象。我也不知道为什么要叫他观察者模式?

下面是代码:

// 被观察的对象(我觉得是通知的主动发送者)
class Subject {
constructor() {
this.register = []; // 注册的观察者(应该叫订阅了通知的对象)
}

// 通知所有“观察者”
notify() {
for(let o of register) {
o.notify();
}
}

// 注册“观察者”
register(observer) {
this.register.push(o);
}
}

// 观察者(我觉得是收到通知的对象)
class Observer {
// 接受通知
notify() {
// ...
}
}
Author: LeoB_O
Link: https://leob-o.github.io/2019/06/17/ObserverPattern/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.