• 我对观察者模式的理解
  • 发布于 2个月前
  • 143 热度
    0 评论
观察者模式:又称为发布-订阅者模式或者消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合 
主要是三个方法:
regist:注册消息,包括消息类型,和需要注册的消息本身
fire:发布消息,发布消息消息类型,需要处理的参数
remove:移除掉改方法
var Observer = (function() {
    var _message = {};
    return {
      // 注册信息接口
      regist: function(type, fn) {
        // 如果此消息不存在则应该创造一个消息类型
        if (typeof _message[type] === 'undefined') {
          //将动作推入到该消息对应的动作执行队列中
          _message[type] = [fn];
        } else {
          _message[type].push(fn);
        }
      },
      // 发布信息 
      fire: function(type, args) {
        // 如果该消息没有被注册,则返回
        if (!_message[type]) return
        // 定义消息信息
        var events = {
            type: type,
            args: args || {},
          },
          i = 0,
          len = _message[type].length;
        for (; i < len; i++) {
          _message[type][i].call(this, events);
        }
      },
      //移除信息 ? 如果要移除全部摸个类型的方法
      remove: function(type, fn) {
        // 如果消息动作存在
        if (_message[type] instanceof Array) {
          // 从最后一个消息动作遍历
          var i = _message[type].length - 1;
          for (; i >= 0; i--) {
            // 如果存在该动作则在消息动作序列中移除相应动作
            _message[type][i] === fn && _message[type].splice(i, 1);
          }
        }
      },
    }
  })();
  Observer.regist('test', function(e) {
    console.log(e.args.msg)
  })
  Observer.fire('test', { msg: '123'});

用户评论