Skip to content

Instantly share code, notes, and snippets.

@YozhEzhi
Created April 21, 2017 23:39
Show Gist options
  • Save YozhEzhi/457efd939fdb47b25e0803afe203f993 to your computer and use it in GitHub Desktop.
Save YozhEzhi/457efd939fdb47b25e0803afe203f993 to your computer and use it in GitHub Desktop.
Observer Design Pattern
const Subject = function() {
let observers = [];
return {
subscribeObserver(observer) {
observers.push(observer);
},
unsubscribeObserver(observer) {
const index = observers.indexOf(observer);
if(index > -1) {
observers.splice(index, 1);
}
},
notifyObserver(observer) {
const index = observers.indexOf(observer);
if(index > -1) {
observers[index].notify(index);
}
},
notifyAllObservers() {
for(var i = 0; i < observers.length; i++){
observers[i].notify(i);
}
}
};
};
const Observer = function() {
return {
notify(index) {
console.log(`Observer ${index} is notified!`);
}
}
};
const subject = new Subject();
const observer1 = new Observer();
const observer2 = new Observer();
const observer3 = new Observer();
const observer4 = new Observer();
subject.subscribeObserver(observer1);
subject.subscribeObserver(observer2);
subject.subscribeObserver(observer3);
subject.subscribeObserver(observer4);
subject.notifyObserver(observer2); // Observer 2 is notified!
subject.notifyAllObservers();
// Observer 1 is notified!
// Observer 2 is notified!
// Observer 3 is notified!
// Observer 4 is notified!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment