Java Reference
In-Depth Information
ruft er dazu die Methode besucheElement() der Objektstruktur auf und übergibt da-
bei das Besucher-Objekt. Dieser Schritt ist nicht durch das Besucher-Muster festgelegt
und kann - je nach Art der Objektstruktur - unterschiedlich sein. Dieser Aspekt wird im
weiteren Verlauf dieses Kapitels noch ausführlich behandelt. Hier wird zuerst eine
einfache Variante vorgestellt, bei der die Objektstruktur zwei Elemente - im Bild mit
keA und keB bezeichnet - enthält.
Das Objekt der Klasse ObjektStruktur sorgt in dieser Variante dafür, dass die zwei
Elemente besucht werden. Es ruft die akzeptieren() -Methode des Objekts keA
vom Typ KonkretesElementA auf und übergibt das Besucher-Objekt kbX , das der
Client vorgegeben hat. Das Objekt keA ruft in seiner akzeptieren() -Methode ledig-
lich die besuchen() -Methode des übergebenen Objekts vom Typ KonkreterBe-
sucherX auf und übergibt hierbei eine Referenz auf sich selbst.
Durch den Typ der übergebenen Referenz wird die für die Klasse des Objekts keA -
also für die Klasse KonkretesElementA - bestimmte Implementierung der besu-
chen() -Methode ausgewählt und vom Besucher-Objekt kbX ausgeführt. In Bild 4-54
besteht diese Implementierung aus dem Aufruf der Methode getDatenA() bei dem
übergebenen Objekt - in diesem Beispiel also beim Objekt keA . Mit den abgeholten
Daten kann nun das Besucher-Objekt einen Teil seiner Gesamtfunktionalität erbringen.
Danach ist der Besuch des ersten Elementes beendet.
Der Ablauf für das Element-Objekt der Klasse keB vom Typ KonkretesElementB ist
identisch, nur, dass in diesem Fall die zur Klasse des Objekts keB passende Imple-
mentierung der besuchen() -Methode herangezogen wird: Es wird getDatenB() an
Stelle von getDatenA() ausgeführt. Das Besucher-Objekt kann die vom Element
keB abgeholten Daten verarbeiten und damit einen weiteren Teil seiner Funktionalität
erbringen.
Der Aufruf von get-Methoden wie beispielsweise getDatenA() muss im Rumpf der
jeweiligen besuchen() -Methode erfolgen, denn nur da kennt ein Besucher die Klasse
des jeweiligen Elements. Dadurch entsteht ein Hin- und Her-Aufruf, der sich im Bild
4-54 durch einen verschobenen Aufrufbalken für die Aufrufe der get-Methoden bei den
Element-Objekten ausdrückt. Durch diesen Hin- und Her-Aufruf kommt die bereits
angesprochene bidirektionale Assoziation zustande, die es ermöglicht, dass jedes
Besucher-Objekt jedes Element-Objekt besuchen kann.
Eigentlich hängt die Auswahl der auszuführenden Operation in ei-
nem solchen Zusammenhang von zwei Typen ab, dem Typ des
Elementes und dem Typ des Besuchers. Diese Technik wird als
Double-Dispatch bezeichnet und nur von wenigen Programmier-
sprachen unterstützt. Die meisten gängigen objektorientierten
Sprachen - darunter auch Java - unterstützen nur ein Single-
Dispatch : die Auswahl einer Operation hängt nur von einem ein-
zigen Typ ab, dem Typ des Objektes, dessen Operation aufgeru-
fen werden soll.
Search WWH ::




Custom Search