发布-订阅模式

仔细思考一下订杂志的过程,我们会发现这样几个特点:
1、 消费者订杂志不需要直接找出版社;
2、 出版社只需要把杂志交给邮局;
3、 邮局将杂志送达消费者。
邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递。
在 Node.js EventEmitter 中的 on 和 emit 方法
on 为订阅者
emit 为发布者
on 的方法使用为 :
on('name', function) //订阅emit 的使用方法为:
emit('name')实现思路
首先 on 方法传入的两个参数,一个为标识,一个为函数
这里我们可以用一个对象来储存传进来的 name 和 函数
其次 emit 方法是 穿进一个标识,通过这个标识来找到其所对应的函数
实现代码
class Event {
constructor() {
this.listener = {}; //定义一个对象来接受传进来的值
}
on(key, fn) {
if (!this.listener[key]) { //判断listener中有无传进来的 key 值
this.listener[key] = [] // 如果没有则创建一个 数组
}
this.listener[key].push(fn) //将函数push到 数组中
}
emit(key) {
for (let i = 0; i < this.listener[key].length; i++) { //使用循环遍历数组中的函数
this.listener[key][i]() //调用数组中的函数
}
}
}
// 调用 Event
var ev = new Event()
ev.on('foo', () => { console.log('foo1') })
ev.on('foo', () => { console.log('foo2') })
ev.emit('foo')