class Publisher {
constructor() {
this.subscribers = [];
}
subscribe(subscriber) {
this.subscribers.push(subscriber);
}
unsubscribe(subscriber) {
const index = this.subscribers.indexOf(subscriber);
if (index !== -1) {
this.subscribers.splice(index, 1);
}
}
notify(message) {
this.subscribers.forEach(subscriber => {
subscriber.update(message);
});
}
}
class Subscriber {
update(message) {
// 空方法,需要在具体的订阅者类中实现
}
}
class EmailSubscriber extends Subscriber {
update(message) {
console.log("EmailSubscriber received message:", message);
}
}
class SMSSubscriber extends Subscriber {
update(message) {
console.log("SMSSubscriber received message:", message);
}
}
const publisher = new Publisher();
const emailSubscriber = new EmailSubscriber();
const smsSubscriber = new SMSSubscriber();
publisher.subscribe(emailSubscriber);
publisher.subscribe(smsSubscriber);
publisher.notify("Hello World!");
运行以上代码输出结果为:
EmailSubscriber received message: Hello World!
SMSSubscriber received message: Hello World!
在这个示例中,Publisher
是一个发布者类,Subscriber
是一个订阅者类,EmailSubscriber
和 SMSSubscriber
是两个具体的订阅者类。
发布者类中有一个 subscribers
数组,用于存储订阅者对象。subscribe
方法用于订阅一个订阅者,unsubscribe
方法用于取消订阅,notify
方法用于通知所有订阅者。
订阅者类中有一个 update
方法,当发布者通知订阅者时,该方法会被调用。EmailSubscriber
和 SMSSubscriber
分别实现了 update
方法。
在主程序中,创建了一个发布者对象 publisher
,创建了一个 EmailSubscriber
对象和一个 SMSSubscriber
对象,并将它们订阅到发布者对象上。然后调用 publisher.notify
方法,发布一条消息,这时两个订阅者的 update
方法会被调用,并输出相应的信息。