发布订阅
概念
在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。【1】汪锦岭. 面向 Internet 的发布/订阅系统的关键技术研究[D]. 中国科学院研究生院(软件研究所), 2005.
EventBus
实现
js
class EventBus {
events = {};
on(eventName, cb) {
(events[eventName] ??= new Set()).add(cb);
}
emit(eventName, ...arg) {
events[eventName]?.forEach((_) => cb(...arg));
}
off(eventName, cb) {
events[eventName]?.delete(cb);
}
once(eventName, cb) {
const handler = (...args) => {
cb(...args);
this.off(eventName, handler);
};
this.on(eventName, handler);
}
}
const bus = new EventBus();