发布订阅模式
发布订阅模式跟房屋租赁模式一样。业主把房子委托给中介,租客去中介租房子。其中,业主与租客没有半毛钱关系。
发布订阅模式是,订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
发布订阅模式 主要分成两个部分 on emit
on 订阅 就是把一些函数维护到一个数组中
emit 发布 就是让数组中的方法依次执行
let fs = require("fs"); // file system
let school = {};
// 类似 房屋租赁 业主把房子放到中介 租户去中介租房子
let event = {
// 订阅和发布没有明显的关联(依赖关系),靠中介数组arr来实现
arr: [],
on(fn) {
this.arr.push(fn);
},
emit() {
this.arr.forEach((fn) => fn());
},
};
event.on(function () {
console.log("读取了一个");
});
event.on(function () {
if(Object.keys(school).length===2){
console.log(school);
}
});
fs.readFile("./name.txt", "utf8", function (err, data) {
school.name = data;
event.emit();
});
fs.readFile("./age.txt", "utf8", function (err, data) {
school.age = data;
event.emit();
});
观察者模式
观察者模式:观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件。