day78-订阅发布者模式

订阅者-发布者模式

前言,最近这个模式非常的火。刚好看书又看到这里。所以就跟着敲了一遍代码,把最基本的思想理了下。

小例子

/**
*
* 订阅者-发布者模式(添加给所有对象)
*/

let event = {
clientList: [], // 缓存对象,存放订阅者的回调函数
listen: function (key, fn) { // 订阅消息
if (!this.clientList[key]) {
this.clientList = [] // 如果没有订阅过key类的消息,创建一个缓存列表
}
this.clientList[key].push(fn) // 订阅消息加入缓存列表
},
trigger: function () { // 发布消息
let key = Array.prototype.shift.call(arguments)
let fns = this.clientList[key]
if (!fns || fns.length === 0) {
return false
}
for (let i = 0, fn; fn = fns[i++];) {
fn.apply(this, arguments)
}
}
}
// 给所有对象动态安装发布-订阅功能
let installEvent = function (obj) {
for (let i in event) {
obj[i] = event[i]
}
}
// 实例-给对象salesOffices 动态增加发布-订阅功能
let salesOffices = {}
installEvent(salesOffices)
salesOffices.listen('squareMeter88', function (price) {
console.log('price=' + price)
})
salesOffices.listen('squareMeter100', function (price) {
console.log('price=' + price)
})
salesOffices.trigger('squareMeter88', 200000)
salesOffices.trigger('squareMeter100', 300000)

end-

文章作者: lmislm
文章链接: http://lmislm.com/2019/03/30/2019-03-30/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog