在发布/订阅模式中,你可以想象存在一个消息中心的地方,你可以在那里“注册一条消息”,那么被注册的这条消息可以被感兴趣的若干人“订阅”,一旦未来这条“消息被发布”,则所有订阅了这条消息的人都会得到提醒。
这个就是发布/订阅模式的设计思路。接下来我们一点一点实现一个简单的发布/订阅模式
function MessageCenter() { let message = {}; //存放消息的对象 this.register = function (messageType) { if (typeof message[messageType] == "undefined") { message[messageType] = []; } else { console.log("消息已经被注册") } } //进行消息注册 this.subscribe = function (messageType, func) { if (typeof message[messageType] != "undefined") { message[messageType].push(func); } else { console.log("消息未注册,不能进行订阅"); } } //进行消息订阅,传入的2个参数,messageType是消息标识 //func,订阅后等待要执行的回调函数 this.fire = function (messageType, args) { if (typeof message[messageType] == "undefined") { console.log("消息未注册,不能进行发布"); return false; } let events = { type: messageType, args: args || {} } message[messageType].forEach(function (item) { item(events); }) }//发布消息,传入的2个参数,essageType是消息标识,args是要 //操作的数据 } let messae = new MessageCenter(); messae.register("benben"); messae.subscribe("benben", subsfun); messae.fire("benben", "你好"); function subsfun(event) { console.log(event.type, event.args); //笨笨,你好 }