Skip to content

Commit 0a73ef7

Browse files
added Observer
1 parent b227394 commit 0a73ef7

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

behavioral/observer/App.ts

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { RadioStation } from "./RadioStation";
2+
import { RadioListener } from "./Subscribers";
3+
4+
export default class ObserverEx {
5+
6+
station: RadioStation;
7+
8+
constructor(){
9+
10+
this.station = new RadioStation();
11+
this.run();
12+
}
13+
14+
run(): void {
15+
16+
this.station.subscribe(new RadioListener());
17+
this.station.subscribe(new RadioListener());
18+
this.station.subscribe(new RadioListener());
19+
20+
this.station.broadcast("Music");
21+
22+
this.station.subscribe(new RadioListener());
23+
24+
this.station.broadcast("News");
25+
}
26+
}

behavioral/observer/RadioStation.ts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Subscriber } from "./Subscribers";
2+
3+
export class RadioStation {
4+
private listeners: Subscriber[] = [];
5+
6+
subscribe(listener: Subscriber): void {
7+
this.listeners.push(listener);
8+
}
9+
10+
unsubscribe(listener: Subscriber): void {
11+
this.listeners = this.listeners.filter(_listener => listener === _listener);
12+
}
13+
14+
broadcast(message: string): void {
15+
this.listeners.forEach((listener: Subscriber) => listener.update(message));
16+
}
17+
}

behavioral/observer/Subscribers.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export interface Subscriber {
2+
update(message: string): void;
3+
}
4+
5+
export class RadioListener implements Subscriber {
6+
update(message: string): void {
7+
console.log(`New Broadcast received: '${message}'`);
8+
}
9+
}

0 commit comments

Comments
 (0)