JavaScript 中的观察者模式

观察者模式(Observer Pattern)一般也作发布/订阅者模式(Publish/Subscribe)。
假设你在淘宝店买了一件衣服,店主要了你的手机号,他说发货了给你发短信,这时候你们就形成了一种发布和订阅的关系,店主是发布者,你是订阅者。

  1. // 伪代码:
  2. // customer 订阅了 StayReal 的商品
  3. customer.subscribe('StayReal')
  4. // StayReal 发货,这时候 customer 会收到 good
  5. shopkeeper.deliver(good)

我们来实现一个 JavaScript 中简单的观察者模式例子

class Observer {
    // 事件列表
    eventList: any = {};
    // 订阅一个事件
    subscribe(evantName: string, callback: any) {
        this.eventList[evantName] = callback;
    };
    // 发布一个事件
    deliver(evantName: string, data: any) {
        const callback = this.eventList[evantName];
        if (!callback) { return };
        callback(data);
    }
}

const observer = new Observer();
// 订阅 sendMessage 事件
observer.subscribe('sendMessage', function (messager: string) {
    console.log(`${messager} 发送了一条消息`);
});
// 发布 sendMessage 事件
observer.deliver('sendMessage', 'Pony');