Skip to content

Instantly share code, notes, and snippets.

@C-Rodg
Last active April 7, 2017 17:25
Show Gist options
  • Save C-Rodg/cddd761c262000aa9a38e4451cd77e59 to your computer and use it in GitHub Desktop.
Save C-Rodg/cddd761c262000aa9a38e4451cd77e59 to your computer and use it in GitHub Desktop.
An example of the Observer pattern implemented with Javascript.
function Subject() {
let context = this;
this.observers = [];
return {
subscribeObserver(observer) {
context.observers.push(observer);
},
unsubscribeObserver(observer) {
const idx = context.observers.indexOf(observer);
if (idx > -1) {
context.observers.splice(idx, 1);
}
},
notifyObserver(observer) {
const idx = context.observers.indexOf(observer);
if (idx > -1) {
context.observers[idx].notify(idx);
}
},
notifyAllObservers() {
context.observers.forEach((observer, i) => {
observer.notify(i);
});
}
};
}
function Observer() {
return {
notify(idx) {
console.log(`Observer ${idx} is notified!`);
}
};
}
const subject = new Subject();
const observer0 = new Observer();
const observer1 = new Observer();
const observer2 = new Observer();
subject.subscribeObserver(observer0);
subject.subscribeObserver(observer1);
subject.subscribeObserver(observer2);
subject.notifyAllObservers();
subject.notifyObserver(observer1);
subject.unsubscribeObserver(observer1);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment