代码如下:
解读
发布者,负责把所有订阅者记录在册(subcribers存放的是所有订阅者)。
发布者,如同一个杂志社,要有让用户(订阅者)取消订阅的方法(将订阅者从记录在册的名单中去除)、通知订阅者的方法:我们杂志已经发给你了(调用订阅者收到通知的方法)。
// 发布者
// 这个类负责维护订阅者列表,提供订阅、取消订阅的方法,以及发布通知的方法
class Publisher {
constructor() {
this.subscribers = []; // 存放订阅者实例
}
// 订阅方法
subscribe(subscriber) {
this.subscribers.push(subscriber);
}
// 取消订阅方法
unsubscribe(subscriber) {
this.subscribers = this.subscribers.filter((sub) => sub !== subscriber);
}
// 发布方法
publish(message) {
this.subscribers.forEach((subscriber) => subscriber.notify(message));
}
}
// 订阅者
class Subscriber {
constructor(name) {
this.name = name;
}
// 接收通知并处理
notify(message) {
console.log(`${this.name} 收到通知:${message}`);
}
}
// 使用示例
// 创建一个杂志社(新闻发布者)
const newsPublisher = new Publisher();
// 两个订阅者
const john = new Subscriber("John");
const jane = new Subscriber("Jane");
// 杂志社收录两个订阅者
newsPublisher.subscribe(john);
newsPublisher.subscribe(jane);
// 杂志社发布新闻杂志
newsPublisher.publish("新闻更新了!");
// 有一个用户取消订阅了
newsPublisher.unsubscribe(john);
// 杂志社发布新闻杂志
newsPublisher.publish("紧急新闻!!");