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