(engl. Observer)
Das Muster Beobachter wird benutzt, wenn Daten zentral in
einem Subjekt (Subject) verwaltet werden und
mehrere Beobachter (Observer) darauf Zugriff
haben. Aktionen können sowohl von den Beobachtern als auch vom
Subjekt initiiert werden und Änderungen im Zustand des
Subjektes zur Folge haben. In diesem Fall muß das System für
Konsistenz sorgen, d.h. alle Beobachter müssen von der
Zustandsänderung informiert werden.
Das Muster besteht aus den abstrakten Klassen
Subjekt und Beobachter. Die Klasse
Subjekt hält eine Liste auf n
Beobachter. Außerdem enthält Beobachter die
Methode update(), bei deren Aufruf dem
Beobachter signalisiert wird, daß sich das
Subjekt geändert hat. Im abstrakten Subjekt
gibt es neben Methoden zum An- und Abmelden von Beobachtern
(login(Beobachter), logout(Beobachter)) die Methoden
broadcast(), die die Beobachter mittels der
update()-Methoden informieren. Da sowohl
Subjekt, als auch Beobachter abstrakt sind,
muß man bei konkreten Anwendungen natürlich von den beiden Basisklassen
ableiten. Diese abgeleiteten Klassen habe ich in der folgenden Graphik als
Server und Client bezeichnet.
|
Abb. 1: Das Observer Design Pattern
|
|