https://github.com/maurerkrisztian/observer-pattern
Observer-pattern
https://github.com/maurerkrisztian/observer-pattern
design-patterns
Last synced: 2 months ago
JSON representation
Observer-pattern
- Host: GitHub
- URL: https://github.com/maurerkrisztian/observer-pattern
- Owner: MaurerKrisztian
- Created: 2021-04-02T17:21:46.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-04-02T19:18:50.000Z (about 4 years ago)
- Last Synced: 2025-01-12T18:52:10.229Z (4 months ago)
- Topics: design-patterns
- Language: TypeScript
- Homepage:
- Size: 5.86 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Observer-pattern
```typescript
// interfaces
export interface IObserver {
update(data: DataTypes, channel?: string): void
}export interface IObservable {
add(observer: IObserver): voidremove(observer: IObserver): void
notify(data: T, channel?: string): void
}export interface IObservableClass { // DataTypes - what thype of data will send the observer?
observable: Observable
}// -------------------------------------
const observable = new Observable();
const observer1 = new Observer1()
const observer2 = new Observer2()
const observer3 = new Observer3()observable.add(observer1)
observable.add(observer2)
observable.add(observer3)// send data to observer1, observer2, observer3
observable.notify({temperatureData: 30, time: new Date()}, 'temperature') // data: DataTypes, channel: stringobservable.remove(observer2)
// send data to observer1, observer3
observable.notify({temperatureData: 12, time: new Date()}, 'temperature')```
### Example usage:
```typescript
export interface IWeatherObservableNotify {
data: number
time: Date;
}export class WeatherObservable implements IObservableClass {
observable: Observable = new Observable();private _temperature: number = 0;
private _humidity: number = 33;setTemperature(t: number) {
this._temperature = t;
this.observable.notify({data: this._temperature, time: new Date()}, 'temperature')
}setHumidity(h: number) {
this._humidity = h;
this.observable.notify({data: this._humidity, time: new Date()}, 'humidity')
}
}export class Observer1 implements IObserver {
lastUpdateData: any;
lastUpdateChannel: any;update(data: IWeatherObservableNotify, channel?: string): void {
this.lastUpdateChannel = channel;
this.lastUpdateData = data;console.log(`Observer1: channel ${channel} data: `, data)
}}
export class Observer2 implements IObserver {
lastUpdateData: any;
lastUpdateChannel: any;update(data: IWeatherObservableNotify, channel?: string): void {
this.lastUpdateChannel = channel;
this.lastUpdateData = data;console.log(`Observer2: channel ${channel} data: `, data)
}}
```