JS 设计模式八 -- 发布订阅者模式

概念

发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多(一个发布,多个观察)的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,全部依赖于它的对象都将获得通知。缓存

 

优势

一、支持简单的广播通讯,当对象状态发生改变时,会自动通知已经订阅过的对象。app

二、发布者与订阅者耦合性下降this

 

缺点

建立订阅者须要消耗必定的时间和内存。spa

若是过分使用的话,反而使代码很差理解及代码很差维护。prototype

 

代码实现

var Event = (function(){
    var list = {}, // 缓存订阅者列表
          listen,   // 订阅
          trigger,  // 发布订阅
          remove;   // 移除订阅
          listen = function(key,fn){
            if(!list[key]) {
                list[key] = [];
            }
            list[key].push(fn);
        };
        trigger = function(){
            var key = Array.prototype.shift.call(arguments),
                 fns = list[key];
            if(!fns || fns.length === 0) {
                return false;
            }
            for(var i = 0, fn; fn = fns[i++];) {
                fn.apply(this,arguments);
            }
        };
        remove = function(key,fn){
            var fns = list[key];
            if(!fns) {
                return false;
            }
            if(!fn) {
                fns && (fns.length = 0);
            }else {
                for(var i = fns.length - 1; i >= 0; i--){
                    var _fn = fns[i];
                    if(_fn === fn) {
                        fns.splice(i,1);
                    }
                }
            }
        };
        return {
            listen: listen,
            trigger: trigger,
            remove: remove
        }
})();
// 订阅:
Event.listen("color",function(size) {
    console.log("尺码为:"+size); // 打印出尺码为42
});// 发布
Event.trigger("color",42);
相关文章
相关标签/搜索