File tree 3 files changed +52
-0
lines changed
3 files changed +52
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments