JavaScript 中的观察者模式
观察者模式(Observer Pattern)一般也作发布/订阅者模式(Publish/Subscribe)。
假设你在淘宝店买了一件衣服,店主要了你的手机号,他说发货了给你发短信,这时候你们就形成了一种发布和订阅的关系,店主是发布者,你是订阅者。
// 伪代码:
// customer 订阅了 StayReal 的商品
customer.subscribe('StayReal')
// StayReal 发货,这时候 customer 会收到 good
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');