发布订阅模式 和 观察者模式
发布订阅并不是观察者模式。但我觉得没有必要细究这个……同样的思路不同的写法而已。另外看了这么久,我还是没懂订阅、发布、观察这三个词是什么意思……
发布订阅模式
发布订阅的核心是调度中心;是指由一个中心来进行事务的发布和订阅;就像Node
中的Event
模块。
使用的方式如下:
var event = new Event();
//订阅消息
event.on("test", function () {
console.log("发布消息");
});
// 触发
event.emit("test");
要实现这样一个发布订阅模式是非常简单的;当然是实现一个简陋版本的……
var Event = function () {
this.events = {};
}
Event.prototype.on = function (task, callback) {
var list = this.events[task];
list ? list.push(callback) : list = [callback];
}
Event.prototype.emit = function (task) {
var events = this.events;
if (!events[task]) {
return false;
}
for (var i = 0; i < events.length; i++) {
events[i]();
}
}
观察者模式
观察者模式与发布订阅模式不同的是,观察者模式一般有两个模块,发布者和订阅者(从这点听更应该叫发布/订阅模式才对啊……真的是)。简单来讲就是分化为两个模块,发布者订阅观察者并手动触发事件,观察者定义事件。
class Subject {
constructor() {
this.observerList = []
}
addObserver(observer) {
this.observerList.push(observer)
}
notify(params) {
this.observerList.forEach(observer => {
observer.update(params)
})
}
}
// 观察者类
class Observer {
constructor(fn) {
this.update = fn
}
}
网友评论