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