观察者模式最常见的应用场景是:
事件消息通知系统。
当一个对象的状态发生变化时,所有依赖于它的对象都得到通知和更新。这时候,我们就可以使用观察者模式实现:

被观察者(Subject) 负责维护一组观察者(Observers)订阅号申请营销引流,当Subject的状态发生变化时,通知所有观察者。
观察者(Observer) 注册到Subject中订阅号申请,并在Subject状态变化时得到通知。

举个具体例子:
假设我们开发一个新闻订阅系统。NewsAgency是被观察者,维护一组订阅者。当有新新闻发布时,通知所有订阅者。
那么代码可以这样实现:
js
// 被观察者
class NewsAgency {
constructor() {
this.observers = []; // 存放订阅者
}
// 注册订阅者
subscribe(observer) {
this.observers.push(observer);
}
// 移除订阅者
unsubscribe(observer) {
this.observers = this.observers.filter(o => o !== observer);
}
// 通知订阅者
notifySubscribers() {
for (let observer of this.observers) {
observer.notify(this); // 调用订阅者的notify方法
}
}
}
// 观察者
class Subscriber {
constructor(name) {
this.name = name;
}
notify(agency) { // 获取通知
console.log(`${this.name} received news update from ${agency.constructor.name}!`);
}
}
// 使用
let sub1 = new Subscriber('User1');
let sub2 = new Subscriber('User2');
let agency = new NewsAgency();
// 注册订阅者
agency.subscribe(sub1);
agency.subscribe(sub2);
// 发布新新闻,通知订阅者
agency.notifySubscribers();

输出:
User1 received news update from NewsAgency!
User2 received news update from NewsAgency!
这就是观察者模式的一个典型应用 – 事件消息订阅与通知系统。
除此之外,观察者模式也常应用于数据和UI绑定,以及各种事件监听处理机制。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。