发布订阅模式的优点:
支持简单的广播通信,当对象状态发生改变时,会自动通知已经订阅过的对象。
比如上面的列子,小明,小红不需要天天逛淘宝网看鞋子到了没有,在合适的时间点,发布者(卖家)来货了的时候,会通知该订阅者(小红,小明等人)。
发布者与订阅者耦合性降低,发布者只管发布一条消息出去,它不关心这条消息如何被订阅者使用,同时,订阅者只监听发布者的事件名,只要发布者的事件名不变,它不管发布者如何改变;同理卖家(发布者)它只需要将鞋子来货的这件事告诉订阅者(买家),他不管买家到底买还是不买,还是买其他卖家的。只要鞋子到货了就通知订阅者即可。
var EventBus = (function () {
var list = {},
listen,
trigger,
remove_listen,
listen = function (key, fn) {
if (!list[key]) {
list[key] = [];
}
list[key].push(fn);
};
trigger = function () {
var key = Array.prototype.shift.call(arguments);
var fns = list[key];
if (!fns || fns.length === 0) {
return;
}
for (let i = 0, fn; fn = fns[i++];) {
fn.apply(this, arguments);
}
};
remove_listen = function (key, fn) {
var fns = list[key];
if (!fns) {
return;
}
if (!fn) {
fns.length = 0;
}
for (let index = fns.length - 1; index >= 0; index--) {
var _fn = fns[index];
if (_fn === fn) {
fns.splice(i, 1);
}
}
};
return {
listen: listen,
trigger: trigger,
remove_listen: remove_listen
}
})()
EventBus.listen('jiawei', function (size) {
console.log(size);
})
EventBus.trigger('jiawei', 43);