design-patterns

Observer Pattern

Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notifies and updated automatically.

Loose Coupling

We are following the principle of loose-coupling by allowing observers to be independent of the publisher object.

WeatherData class can be developed without being too much concerned about any of the observers that may want to use the state from it.
That said, we can implement and add more Display classes that use the state from WeatherData much more easily.

Interface diagram

Implementation

// State.ts

export type State = {
    temperature: number
    humidity: number
    pressure: number
}
// Observer.ts

import { State } from "./State";

export abstract class Observer {

    abstract update(state: State): void
}
// Subject.ts

import { Observer } from "./Observer";

export abstract class Subject {

    abstract registerObserver(observer: Observer): void
    abstract removeObserver(observer: Observer): void
    abstract notifyObservers(): void
}