码迷,mamicode.com
首页 > 其他好文 > 详细

发布订阅模式

时间:2020-06-27 11:28:26      阅读:48      评论:0      收藏:0      [点我收藏+]

标签:==   push   cal   each   type   长度   对象   关系   成功   

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方法,如果长度等于指定时,则执行方法

发布订阅模式

标签:==   push   cal   each   type   长度   对象   关系   成功   

原文地址:https://www.cnblogs.com/qisexin/p/13197544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!