Skip to content

Instantly share code, notes, and snippets.

@dxcqcv
Created May 20, 2017 13:08
Show Gist options
  • Save dxcqcv/9ac103db12e553cdb235eafbe7bcbb5b to your computer and use it in GitHub Desktop.
Save dxcqcv/9ac103db12e553cdb235eafbe7bcbb5b to your computer and use it in GitHub Desktop.
Observer Pattern
var Subject = function() {
var observers = [];
return {
subscribeObserver: function(observer) {
observers.push(observer);
},
unsubscribeObserver: function(observer) {
var index = observers.indexOf(observer);
if(index > -1) {
observers.splice(index, 1);
}
},
notifyObserver: function(observer) {
var index = observers.indexOf(observer);
if(index > -1) {
observers[index].notify(index);
}
},
notifyAllObservers: function() {
for(var i = 0; i < observers.length; i++) {
observers[i].notify(i);
}
}
}
};
var Observer = function() {
return {
notify: function(index) {
console.log("Observer " + index + " is notified!");
}
}
}
var subject = new Subject();
var observer1 = new Observer();
var observer2 = new Observer();
var observer3 = new Observer();
var observer4 = new Observer();
subject.subscribeObserver(observer1);
subject.subscribeObserver(observer2);
subject.subscribeObserver(observer3);
subject.subscribeObserver(observer4);
subject.notifyObserver(observer2);
subject.notifyAllObservers();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment