Java Reference
In-Depth Information
Beobachtbar
Ein Beobachtbarer hält eine Liste von Referenzen auf Objekte, die das Interface
IBe-
obachter
implementieren. Meldet sich ein Beobachter an, so wird ein neuer Eintrag
zu dieser Liste hinzugefügt. Bei Abmeldung wird der Eintrag wieder aus der Liste
entfernt. Hierdurch hat der Beobachtbare immer eine aktuelle Liste seiner angemel-
deten Beobachter. Änderungen am Beobachter sind für den Beobachtbaren irrelevant,
solange dieser das Callback-Interface einhält. Zur Kompilierzeit kennt der Beobacht-
bare vom Beobachter nur das Callback-Interface
IBeobachter
. Nach dem liskov-
schen Substitutionsprinzip kann bei Einhaltung der Verträge an die Stelle eines Inter-
face stets ein Objekt treten, das dieses Interface implementiert. Demnach besteht zwar
eine Abhängigkeit zu diesem Interface beim Kompilieren. Da das Interface aber vom
Beobachtbaren vorgegeben wird, ist es de facto keine wirkliche Abhängigkeit.
Wenn sich sein Zustand ändert, benachrichtigt der Beobachtbare die bei ihm angemel-
deten Beobachter durch Aufruf der Methode
aktualisieren()
.
Beobachter
Ein Beobachter implementiert das Interface
IBeobachter
und damit auch die Metho-
de
aktualisieren()
. Wenn die Beobachter über eine Änderung benachrichtigt wer-
den sollen, iteriert der Beobachtbare in der Methode
benachrichtigen()
über die
gespeicherten Referenzen der Beobachter. Dabei führt er für jeden Beobachter die Be-
nachrichtigungs-Operation
aktualisieren()
aus.
4.11.3.3 Dynamisches Verhalten
Jeder Beobachter meldet sich beim Objekt der Klasse
Beobachtbar
, das er beobach-
ten will, an. Werden die Daten eines beobachtbaren Objekts geändert, was in Bild 4-35
beispielhaft durch einen Aufruf der Methode
setzeZustand()
angedeutet wird, dann
ruft das beobachtbare Objekt seine eigene Methode
benachrichtigen()
(in einer
neuen, verschobenen Ausführungsspezifikation) auf. Die Methode
benachrichti-
gen()
informiert alle angemeldeten Beobachter durch einen Aufruf der Methode
ak-
tualisieren()
und übergibt dabei eine Referenz auf sich selbst. Ein Beobachter
kann nun mit Hilfe der Methode
gibZustand()
vom beobachtbaren Objekt die Infor-
mation über den neuen Zustand erhalten. Daher kommt es auch dort zu einem wei-
teren Balken der Ausführungsspezifikation
58
.
Die Methode
setzeZustand()
wurde bislang nicht erwähnt und spielt im Rahmen
des Beobachter-Musters keine Rolle. Diese Methode steht stellvertretend für eine an-
wendungsspezifische Methode der konkreten Klasse der beobachtbaren Objekte, in
der die
für die Beobachtung relevanten Daten eines Objektes geändert werden.
An der Methode
gibZustand()
sieht man, dass in diesem Sequenzdiagramm das
Pull-Verfahren gezeigt wird. Der Beobachter holt die Änderungen selbst ab. Die Me-
thode
gibZustand()
stellt die Ausführung einer weiteren Methode im beobachtbaren
58
Eine Ausführungsspezifikation - in UML 1 hieß der Begriff Aktivitätsbalken oder Steuerungsfokus
(engl. focus of control) - zeigt sowohl die Zeitdauer, während der eine Ausführung aktiv ist, als auch
die Kontrollbeziehung zwischen der Ausführung und dem dazugehörigen Aufrufer.
Search WWH ::
Custom Search