zoukankan      html  css  js  c++  java
  • javascript的简易发布/订阅模式

    发布/订阅(pub/sub)是一种消息模式,它的两个参与者:发布者和订阅者。发布者向某个信道发布一条消息,订阅者绑定这个信道,当有消息发布到信道里面的时候,订阅者回接受到这个通知。发布者和订阅者是完全解耦的,彼此仅仅共享一个通道名称。

    这种模式提高了应用的可维护性,让应用易于扩展。

    简单的设计思路:设计信道记录发布的信息,然后在订阅者中执行成功回调函数(从信道中监听事件)。

    var PubSub = {
        subscribe: function(key, callback) {

          //this._callbacks = this._callbacks || {};
          //this._callbacks[key] = this._callbacks[key] || [];
          //this._callbacks[key].push(callback);

         this._callbacks || (this.callbacks = {});
            (this._callbacks[key] || (this._callbacks[key] = [])).push(callback);
            return this;
        },
        publish: function() {
            var args = Array.prototype.slice.call(arguments, 0);//参数转数组
            var key = args.shift();//找key
            var list, calls, i, l;
         //没有_callbacks直接返回,没有_callbacks[key]直接返回

          //if(this._callbacks && this._callbacks[key]){
          //  list = this._callbacks[key]
          //  calls = this._callbacks;
          //}else{
          //  return this;
          //}

          if (!(calls = this._callbacks)) return this;
            if (!(list = this._callbacks[key])) return this;
         //执行回调
    for (i = 0, l = list.length; i < l; i++) { list[i].apply(this, args); } return this; } }; // 使用方法 PubSub.subscribe("leju", function() { alert("leju"); }); PubSub.publish("leju");

    上面的原生js实现的,下面的时jquery实现。

    $(function(){
            var obj = $({});
            $.subscribe = function(){
                obj.bind.apply(obj, arguments);
            }
            $.unsubscribe = function(){
                obj.unbind.apply(obj, arguments);
            }
            $.publish = function(){
                obj.trigger.apply(obj, arguments);
            }
        //调用方法 $.subscribe(
    "leju", function( event, a) {
            console.log( event.type, a); }); $.publish(
    "leju", "leju"); })
  • 相关阅读:
    Thrift的安装以及问题
    nodejs安装和配置
    angularjs ng-bind-html中的ng-model不生效
    设计模式之美---接口和抽象类的区别
    angular 8 不兼容IE11
    Xamarin 打包生成 Android apk 文件
    微服务的4个设计原则和19个解决方案
    RESTful API设计规范
    windows下 安装 rabbitMQ
    关于C#应用的授权认证
  • 原文地址:https://www.cnblogs.com/otss/p/4980818.html
Copyright © 2011-2022 走看看