1
+ // Observer Interface
2
+ class Observer {
3
+ update ( temperature ) {
4
+ throw new Error ( "Die Methode 'update' muss implementiert werden" ) ;
5
+ }
6
+ }
7
+
8
+ // Concrete Observer - ein Display, das die Temperatur anzeigt
9
+ class TemperatureDisplay extends Observer {
10
+ update ( temperature ) {
11
+ console . log ( `Temperature Display: Die aktuelle Temperatur ist ${ temperature } °C` ) ;
12
+ }
13
+ }
14
+
15
+ // Concrete Observer - ein Logger, der die Temperaturänderungen protokolliert
16
+ class TemperatureLogger extends Observer {
17
+ update ( temperature ) {
18
+ console . log ( `Temperature Logger: Die Temperatur wurde auf ${ temperature } °C geändert` ) ;
19
+ }
20
+ }
21
+
22
+ // Subject Interface
23
+ class Subject {
24
+ constructor ( ) {
25
+ this . observers = [ ] ;
26
+ }
27
+
28
+ attach ( observer ) {
29
+ this . observers . push ( observer ) ;
30
+ }
31
+
32
+ detach ( observer ) {
33
+ this . observers = this . observers . filter ( obs => obs !== observer ) ;
34
+ }
35
+
36
+ notify ( temperature ) {
37
+ this . observers . forEach ( observer => observer . update ( temperature ) ) ;
38
+ }
39
+ }
40
+
41
+ // Concrete Subject - eine Wetterstation, die die Temperatur verfolgt
42
+ class WeatherStation extends Subject {
43
+ constructor ( ) {
44
+ super ( ) ;
45
+ this . temperature = 0 ;
46
+ }
47
+
48
+ setTemperature ( value ) {
49
+ this . temperature = value ;
50
+ this . notify ( value ) ;
51
+ }
52
+ }
53
+
54
+ // Nutzung des Observer Patterns
55
+ const weatherStation = new WeatherStation ( ) ;
56
+
57
+ // Erstellen von Observern
58
+ const display = new TemperatureDisplay ( ) ;
59
+ const logger = new TemperatureLogger ( ) ;
60
+
61
+ // Observer registrieren
62
+ weatherStation . attach ( display ) ;
63
+ weatherStation . attach ( logger ) ;
64
+
65
+ // Temperatur ändern
66
+ weatherStation . setTemperature ( 25 ) ;
67
+ weatherStation . setTemperature ( 30 ) ;
0 commit comments