Skip to content

Instantly share code, notes, and snippets.

@vishaltelangre
Created March 27, 2013 05:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vishaltelangre/5251837 to your computer and use it in GitHub Desktop.
Save vishaltelangre/5251837 to your computer and use it in GitHub Desktop.
Mediator Pattern
// Example 1
mediator.name = 'Doug';
mediator.subscribe('nameChange', function(arg) {
console.log(this.name);
this.name = arg;
console.log(this.name);
});
mediator.publish('nameChange', 'Jorn');
// Example 2
var obj = {
name: 'John'
};
mediator.installTo(obj);
obj.subscribe('nameChange', function(arg) {
console.log(this.name);
this.name = arg;
console.log(this.name);
});
obj.publish('nameChange', 'Sam');
var mediator = (function() {
var subscribe = function(channel, fn) {
if (!mediator.channels[channel]) mediator.channels[channel] = [];
mediator.channels[channel].push({
context: this,
callback: fn
});
return this;
};
var publish = function(channel) {
if (!mediator.channels[channel]) return false;
var args = Array.prototype.slice.call(arguments, 1);
for (var i = 0, l = mediator.channels[channel].length; i < l; i++) {
var subscription = mediator.channels[channel][i];
subscription.callback.apply(subscription.context.args);
};
return this;
};
return {
channels: {},
publish: publish,
subscribe: subscribe,
installTo: function(obj) {
obj.subscribe = subscribe;
obj.publish = publish;
}
};
}());
// REFERENCE:
// https://gist.github.com/addyosmani/1794823
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment