javascript 设计模式之观察者模式

观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发生改变时能得到通知,下面我通过一个通用的Observer来方便对象实现发布订阅,

var Observer = {
  addSub: function(callback){
    this._subList.push(callback);
  },
  removeSub: function(callback){
    for(var i=0; i<this._subList.length; i++){
      if(this._subList[i] === callback){
        delete this._subList[i];
      }
    }
  },
  publish: function(what){
      for(var i=0; i<this._subList.length; i++){
        if(typeof this._subList[i] === "function"){
          this._subList[i](what);
        }
      }
  },

      //使object是发布订阅对象
  makeObserver: function(obj){
      for(var key in this){
        obj[key] = this[key];
        obj._subList = [];
      }
    }
  };
//-----------------------------------------------------------------发布对象

var person1 = {
  recommend: function(str){
    var msg = "person1 发布的数据 " + str;
    this.publish(msg);
  }
};
var person2 = {
  recommend: function(str){
    var msg = "person2 发布的数据 " + str;
    this.publish(msg);
  }
};

Observer.makeObserver(person1);//实现person1对象的发布
Observer.makeObserver(person2);//实现person2对象的发布
//-----------------------------------------------------------------订阅对象

var tom = {
  read: function(what){//订阅方法
    console.log("Tom看到了如下信息:" + what);
  }
};
var jack = {
  show: function(what){
    console.log('jack看到了如下信息:' + what)
  }
}

person1.addSub(tom.read);
person1.addSub(jack.show);
person1.recommend("123");

console.log("........移除jack的订阅..............");
person1.removeSub(jack.show);
person1.recommend("678");
console.log(".............................");

person2.addSub(jack.show);
person2.recommend("456");

转载于:https://www.cnblogs.com/ajun/p/4361371.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值