跳到主要内容

观察者模式(Observer Pattern)

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让一个对象(主题或被观察者)在其状态变化时通知其所有依赖者(观察者)并自动更新它们。观察者模式用于建立对象之间的松散耦合关系,其中一个对象(主题)的状态发生变化时,它的所有观察者都会得到通知。

场景

事件处理:观察者模式常用于事件处理系统,其中事件源是主题,事件处理程序是观察者。

用户界面:在用户界面开发中,观察者模式用于实现界面元素的更新和数据同步。

发布-订阅模型:观察者模式是发布-订阅模型的一种实现方式,用于实现消息传递和通信。

分布式系统:在分布式系统中,观察者模式可用于实现事件广播和通知。

实现

// 主题(被观察者)
class Subject {
constructor() {
this.observers = [];
}

addObserver(observer) {
this.observers.push(observer);
}

removeObserver(observer) {
const index = this.observers.indexOf(observer);
if (index !== -1) {
this.observers.splice(index, 1);
}
}

notify(message) {
for (const observer of this.observers) {
observer.update(message);
}
}
}

// 观察者
class Observer {
constructor(name) {
this.name = name;
}

update(message) {
console.log(`${this.name} received message: ${message}`);
}
}

// 创建主题
const subject = new Subject();

// 创建观察者
const observer1 = new Observer("Observer 1");
const observer2 = new Observer("Observer 2");
const observer3 = new Observer("Observer 3");

// 注册观察者
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.addObserver(observer3);

// 发送通知给观察者
subject.notify("Hello, observers!");

在上面的示例中,Subject 是主题,它维护一个观察者列表,并提供了注册、注销和通知观察者的方法。Observer 是观察者,它实现了 update 方法,用于处理来自主题的通知。

客户端代码创建主题和观察者,然后将观察者注册到主题中。当主题发出通知时,所有注册的观察者都会接收到通知并执行其 update 方法。

观察者模式允许对象之间实现松散耦合,使系统更具可维护性和扩展性,因为您可以轻松地添加新观察者或删除现有观察者,而不影响主题或其他观察者。这使得它非常适用于实现事件处理和消息传递系统。