zoukankan      html  css  js  c++  java
  • 手写一个简单的发布订阅模式

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

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

        
     
     
  • 相关阅读:
    恶意代码分析实战-确认EXE什么时候编译的
    恶意代码分析-工具收集
    Bug Bounty Reference
    [ Mongodb ] 问题总汇
    [ kvm ] 四种简单的网络模型
    [ kvm ] 进程的处理器亲和性和vCPU的绑定
    虚拟化概念总结
    centos7安装tengine强制使用HTTPS访问
    [ SSH 两种验证方式原理 ]
    [ Centos 7 iscsi搭建 及 1台客户端同时挂载多台iscsi服务端问题 ]
  • 原文地址:https://www.cnblogs.com/garyzhijiang/p/9242498.html
Copyright © 2011-2022 走看看