Skip to content

Instantly share code, notes, and snippets.

@zoolu-got-rhythm
Created December 2, 2022 18:32
Show Gist options
  • Save zoolu-got-rhythm/c112f357979ab7c375890bf172d516fb to your computer and use it in GitHub Desktop.
Save zoolu-got-rhythm/c112f357979ab7c375890bf172d516fb to your computer and use it in GitHub Desktop.
observer pattern implementation in typescript
interface Observer<ObservableClass, ObservableEventEnum>{
update: (ObjectRef: ObservableClass, observableEventEnum: ObservableEventEnum) => void;
}
class Observable<ObservableClass, ObservableEventEnum>{
observers: Observer<ObservableClass, ObservableEventEnum>[];
constructor(){
this.observers = [];
}
attach(observer: Observer<ObservableClass, ObservableEventEnum>){
this.observers.push(observer);
}
detach(observer: Observer<ObservableClass, ObservableEventEnum>){
const indexOfObserver = this.observers.indexOf(observer);
if(indexOfObserver > -1)
this.observers.splice(indexOfObserver, 1);
}
notify(eventType: ObservableEventEnum){
let objRef = ((this as unknown) as ObservableClass);
this.observers.forEach(observer => {
observer.update(objRef, eventType);
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment