观察者模式 (Observer)
· 阅读需 2 分钟
观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个 “观察” 该对象的其他对象。
- 开闭原则,你无需修改发布者代码就能引入新的订阅者类(如果是发布者接口则可轻松引入发布者类)。
- 你可以在运行时建立对象之间的联系。
- 订阅者的通知顺序是随机的。
示例
具体观察者 ConcreteObserverA 实现 Observer 接口,ConcreteSubject 实现 Subject 接口。
interface Subject {
attach(observer: Observer): void;
detach(observer: Observer): void;
// 通知所有订阅者
notify(): void;
}
interface Observer {
update(): void;
}
class ConcreteSubject implements Subject {
// 观察者列表
private observerList: Observer[] = [];
attach(observer: Observer): void {
this.observerList.push(observer);
}
detach(observer: Observer): void {
this.observerList.splice(this.observerList.indexOf(observer), 1);
}
// 遍历通知每个观察者
notify(): void {
for (const observer of this.observerList) {
observer.update();
}
}
}
class ConcreteObserverA implements Observer {
update(): void {
console.log('ObserverA update');
}
}
class ConcreteObserverB implements Observer {
update(): void {
console.log('ObserverB update');
}
}
const subject = new ConcreteSubject();
const observerA = new ConcreteObserverA();
const observerB = new ConcreteObserverB();
subject.attach(observerA);
subject.attach(observerB);
subject.notify();
输出:
ObserverA update
ObserverB update