Mediator Patter Library

Snippets for implementing Mediator Patter

by Hugh Chapman

JavaScript

//  Mediator Pattern Rules
//  1. Hands to yourself
//    only call own methods
//    Dont Access DOM elements outside of your box
//    Don't access non-native global objects
//  2. Ask, Don't Take
//    Anything else you need ask the mediator class
//  3. Don't Leave Your Toys Around
//    Don't create global objects
//  4. Don't Talk To Strangers
//    Don't directly reference other modules


// CORE
Core.register("module-name", function(sandbox){
    return {
        init: function(){
            //constructor
        },
        destroy: function() {
            // destructor
        }
    };
});

Core = function() {
    var moduleData = {};
    
    return {
        register: function(moduleId, creator){
            moduleData[moduleId] = {
                creator: creator,
                instance: null
            };
        },
        start: function(moduleId){
            moduleData[moduleId].instance = moduleData[moduleId].creator(new Sandbox(this));
            moduleData[moduleId].instance.init();
        },
        stop: function(moduleId){
            var data = moduleData[moduleId];
            if (data.instance) {
                data.instance.destroy();
                data.instance = null;
            }
        },
        startAll: function(){
            for (var moduleId in moduleData) {
                if(moduleData.hasOwnProperty(moduleId)){
                    this.start(moduleId);
                }
            }
        },
        stopAll: function(){
            for (var moduleId in moduleData) {
                if(moduleData.hasOwnProperty(moduleId)){
                    this.stop(moduleId);
                }
            }
        }
    }
}

//register modules
Core.register('module1', function(sandbox){  /*...*/  });
Core.register('module2', function(sandbox){  /*...*/  });
Core.register('module3', function(sandbox){  /*...*/  });
Core.register('module4', function(sandbox){  /*...*/  });
...
// start the application by starting all...