中介者模式(Mediator):通过中介者对象封装了一系列对象之间的交互,是对象之间不在相互引用,降低它们之间的耦合。

中介者模式和观察者模式类似都是使用消息的收发机制实现的,在观察者模式中,一个对象既可以是消息的发送者也可以是消息的接收者,他们之间信息交流依托于信息系统实现的解耦。而中介者模式中消息的发送者只有一个,就是中介者对象,而且中介者对象不能订阅消息,只有那些活跃对象(订阅者)才能订阅中介者的消息,中介者对象只能是消息的发送者。

var Mediator = (function () {
        //防止消息队列被暴漏而被篡改所以将消息容器作为静态私有变量保存
        var __messages = {};
        return {
            //注册信息接口
            regist: function (type, fn) {
                //如果消息不存在则创建一个该消息类型
                if (typeof __message[type] === 'undefined') {
                    //将动作推入到该消息对应的动作执行队列中
                    __messages[type] = [fn];
                } else {
                    __messages[type].push(fn);
                }
            },
            //发布信息接口
            send: function (type, args) {
                //如果消息已经被订阅
                if(__messages[type]){
                    // 遍历消息动作
                    for (var i = 0; i < __messages[type].length; i++) {
                        // 依次回调函数
                        __messages[type][i]&&__messages[type][i]();
                    }
                }
            }
        }
    })();

    Mediator.regist('demo',function(){
        console.log('first');
    })
    Mediator.regist('demo',function(){
        console.log('second');
    })
    Mediator.send('demo');    //first second