发布订阅者模式

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 是一个订阅者类,EmailSubscriberSMSSubscriber 是两个具体的订阅者类。

发布者类中有一个 subscribers 数组,用于存储订阅者对象。subscribe 方法用于订阅一个订阅者,unsubscribe 方法用于取消订阅,notify 方法用于通知所有订阅者。

订阅者类中有一个 update 方法,当发布者通知订阅者时,该方法会被调用。EmailSubscriberSMSSubscriber 分别实现了 update 方法。

在主程序中,创建了一个发布者对象 publisher,创建了一个 EmailSubscriber 对象和一个 SMSSubscriber 对象,并将它们订阅到发布者对象上。然后调用 publisher.notify 方法,发布一条消息,这时两个订阅者的 update 方法会被调用,并输出相应的信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值