Skip to content

Instantly share code, notes, and snippets.

@WesleySmits
Created August 28, 2022 10:10
Show Gist options
  • Save WesleySmits/8c31122f0eef1826b79f4c96c600c10b to your computer and use it in GitHub Desktop.
Save WesleySmits/8c31122f0eef1826b79f4c96c600c10b to your computer and use it in GitHub Desktop.
Observer Pattern: Abstract subject class
export default abstract class AbstractSubject implements Subject {
#observers: Observer[] = [];
public get observers(): Observer[] {
return this.#observers;
}
public attach(observer: Observer): void {
if (this.#observers.includes(observer)) {
return;
}
this.#observers.push(observer);
}
public detach(observer: Observer): void {
this.#observers = this.#observers.filter((o) => o !== observer);
}
public notify(): void {
for (const observer of this.#observers) {
observer.update(this);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment