Skip to content

Instantly share code, notes, and snippets.

@myildizCH
Last active August 8, 2023 09:54
Show Gist options
  • Save myildizCH/e0102a18c36357f3907208d6698ddda0 to your computer and use it in GitHub Desktop.
Save myildizCH/e0102a18c36357f3907208d6698ddda0 to your computer and use it in GitHub Desktop.
Observer Pattern
// Observer Interface
interface Observer {
update(steps: number, heartRate: number, sleep: number): void;
}
// Subject Interface
interface Subject {
registerObserver(observer: Observer): void;
removeObserver(observer: Observer): void;
notifyObservers(): void;
}
// FitnessTracker class implementing Subject
class FitnessTracker implements Subject {
private observers: Observer[] = [];
private steps: number;
private heartRate: number;
private sleep: number;
registerObserver(observer: Observer): void {
this.observers.push(observer);
}
removeObserver(observer: Observer): void {
const index = this.observers.indexOf(observer);
if (index !== -1) {
this.observers.splice(index, 1);
}
}
notifyObservers(): void {
for (let observer of this.observers) {
observer.update(this.steps, this.heartRate, this.sleep);
}
}
setActivityData(steps: number, heartRate: number, sleep: number): void {
this.steps = steps;
this.heartRate = heartRate;
this.sleep = sleep;
this.notifyObservers();
}
}
// SmartWatch class implementing Observer
class SmartWatch implements Observer {
update(steps: number, heartRate: number, sleep: number): void {
console.log(`SmartWatch - Steps: ${steps}, Heart Rate: ${heartRate}, Sleep: ${sleep} hours`);
}
}
// MobileApp class implementing Observer
class MobileApp implements Observer {
update(steps: number, heartRate: number, sleep: number): void {
console.log(`MobileApp - Steps: ${steps}, Heart Rate: ${heartRate}, Sleep: ${sleep} hours`);
}
}
// Usage
const fitnessTracker = new FitnessTracker();
const smartWatch = new SmartWatch();
const mobileApp = new MobileApp();
fitnessTracker.registerObserver(smartWatch);
fitnessTracker.registerObserver(mobileApp);
fitnessTracker.setActivityData(10000, 72, 8);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment