发布-订阅模式,看似陌生,其实不然。工作中经常会用到,Node.js EventEmitter 中的 on 和 emit 方法;
什么是发布-订阅模式
发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。
订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布该事件(Publish Event)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
demo
// on是订阅 emit是发布
let e = {
_callback: [],
on(callback) {
// 订阅一件事 当这件事发生的时候 触发对应的函数
// 订阅 就是将函数放到数组中
this._callback.push(callback);
},
emit(value) {
this._callback.forEach(method => {
method(value);
});
}
};
// 订阅
e.on(function (value) {
console.log(value + ":张三的订阅");
});
// 订阅
e.on(function (value) {
console.log(value + ":李四的订阅");
});
// 订阅
e.on(function (value) {
console.log(value + ":王五的订阅");
});
// 发布
e.emit('发布')