观察者模式
// 被观察者(Subject)
class Subject {
constructor() {
this.observers = []; // 存储所有观察者
}
// 添加观察者
addObserver(observer) {
this.observers.push(observer);
}
// 移除观察者
removeObserver(observer) {
this.observers = this.observers.filter((obs) => obs !== observer);
}
// 通知所有观察者
notify(data) {
this.observers.forEach((observer) => observer.update(data));
}
// 模拟状态变化
changeState(newState) {
console.log(`状态变为: ${newState}`);
this.notify(newState); // 状态变化时通知
}
}
// 观察者(Observer)
class Observer {
constructor(name) {
this.name = name;
}
// 更新方法
update(data) {
console.log(`${this.name} 收到更新: ${data}`);
}
}
// 使用示例
const subject = new Subject();
const observer1 = new Observer("观察者 1");
const observer2 = new Observer("观察者 2");
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.changeState("新状态"); // 输出:状态变为: 新状态
// 观察者 1 收到更新: 新状态
// 观察者 2 收到更新: 新状态最后更新于