手写一个简单的发布订阅模式

在发布/订阅模式中,你可以想象存在一个消息中心的地方,你可以在那里“注册一条消息”,那么被注册的这条消息可以被感兴趣的若干人“订阅”,一旦未来这条“消息被发布”,则所有订阅了这条消息的人都会得到提醒。

这个就是发布/订阅模式的设计思路。接下来我们一点一点实现一个简单的发布/订阅模式
  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); //笨笨,你好
        }    

    
 
 

猜你喜欢

转载自www.cnblogs.com/garyzhijiang/p/9242498.html