发布订阅模式

let fs = require('fs');

// 发布订阅 发布和订阅没关系  中间通过数组进行关联
function Events() {
    this.callbacks = [];
    this.results = [];
}

// 订阅
Events.prototype.on = function (callback) {
    this.callbacks.push(callback);
}
// 发布
Events.prototype.emit = function (data) {
    this.results.push(data);
    this.callbacks.forEach(cb=>cb(this.results));
}

let e = new Events();
e.on(function (res) {
    if (res.length === 2) {
        console.log(res);
    }
});

// 读文件
fs.readFile('./a.txt', 'utf8', function (err, data) {
    e.emit(data);
});
fs.readFile('./b.txt', 'utf8', function (err, data) {
    e.emit(data);
});

//发布订阅代码实现

发布订阅模式我理解就是面向对象的一种思想,也是一种代码的设计模式,就和java的三层架构一样.

发布订阅从名字分析则知道有两个角色,分别是发布者和订阅者,每个角色又有不同的事件.

发布者可以发布内容,在发布之后订阅者可以监听,可以得到内容.

代码中间通过一个Events代表事件,在Events上有两个数组,发布者通过在Events的原型上调用emit方法,如果发布成功,则通过执行 this.results.push(data)向数组中添加事件在调用回调函数遍历内容,订阅者有一个on方法,如果长度等于指定时,则执行方法

posted @ 2020-06-27 10:29  彼_岸  阅读(464)  评论(0编辑  收藏  举报