Skip to content

Instantly share code, notes, and snippets.

@karl-park
Created May 10, 2017 03:41
Show Gist options
  • Save karl-park/9b02d14439af5597f0f4124a6f3f076d to your computer and use it in GitHub Desktop.
Save karl-park/9b02d14439af5597f0f4124a6f3f076d to your computer and use it in GitHub Desktop.
javascript_mediator_implementation(publisher_subscripber_pattern)
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;
},
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;
}
};
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment