RainZhai / rainzhai.github.com

宅鱼
http://rainzhai.github.io
Apache License 2.0
2 stars 0 forks source link

观察者模式的实现 #28

Open RainZhai opened 5 years ago

RainZhai commented 5 years ago

发布订阅者模式,消息机制,解决主体对象与观察者之间功能耦合。

var observer = (function(){
  var _msg = {};
  return {
    regist: function(type, fn){
      console.log(_msg[type])
      if(typeof _msg[type] === 'undefined'){
        _msg[type] = [fn]
      }else{
        _msg[type].push(fn)
      }
    },
    fire: function(type, args){
      if(!_msg[type]) return;
      var events = {
        type:type,
        args: args || {}
      },
      i = 0, 
      len = _msg[type].length;
      for(; i< len; i++){
        _msg[type][i].call(this, events)
      }
    },
    remove: function(type, fn){
      if(_msg[type] instanceof Array){
        var i = _msg[type].length -1;
        for(; i>0; i--){
          _msg[type][i] === fn && _msg[type].splice(i,1);
        }
      }
    }
  }
})();
observer.regist('test', (e)=>{console.log(e.type, e.args.msg)})
observer.regist('test', (e)=>{console.log(e.type, e.args.msg)})
observer.remove('test', (e)=>{console.log(e.type, e.args.msg)})
observer.fire('test', {msg: 'sssss'})