Skip to content

Instantly share code, notes, and snippets.

@happysahota
Last active June 12, 2017 13:57
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 happysahota/9b245ad9b57562eba089f597ad762bf3 to your computer and use it in GitHub Desktop.
Save happysahota/9b245ad9b57562eba089f597ad762bf3 to your computer and use it in GitHub Desktop.
This is Demo for the PubSub design pattern
/*PubSub Pattern*/
var pubSub = {
events: [],
on: function(eventName, fn) {
this.events[eventName] = this.events[eventName] || [];
this.events[eventName].push(fn);
},
emit: function(eventName, data) {
if(this.events[eventName]) {
this.events[eventName].forEach(function(fn){
fn(data);
});
}
},
off: function(eventName, fn) {
var index = this.events[eventName].indexOf(fn);
if(index != -1) {
this.events[eventName].splice(index, 1);
}
},
inspect:function(){
console.log(this.events);
}
};
var membersObj = (function(){
var members = ["Happy"];
function addMember(name){
members.push(name);
pubSub.emit("membersUpdated", members);
}
function removeMember(id){
members.splice(id,1);
pubSub.emit("membersUpdated", members);
}
function inspect (){
console.log(members);
}
return {
addMember: addMember,
cutMember: removeMember
};
})();
var memberActor = (function(){
function responder(data) {
console.log("_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-");
console.log(data);
console.log("_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-");
}
pubSub.on("membersUpdated", responder);
return {
off: function(){
pubSub.off("membersUpdated", responder);
}
}
})();
//Demo How it get execute.
membersObj.addMember("Harry");
membersObj.cutMember(1);
membersObj.addMember("Darry");
memberActor.off(); // remove the event listner
membersObj.addMember("Sharry"); // nothing will get printed from memberActor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment