Java Reference
In-Depth Information
Double-Dispatch muss also in Java simuliert werden. Dies geschieht dadurch, dass die
konkreten Elemente der Objektstruktur die in der Basisklasse deklarierte akzeptie-
ren() -Methode - wie bereits beschrieben - implementieren. Im Rumpf dieser Me-
thode rufen sie die besuchen() -Methode des Objektes vom Typ Konkreter-
BesucherX auf und übergeben hierbei eine Referenz auf sich selbst als Parameter.
Damit ist - wie gewünscht - die Auswahl der "richtigen" besuchen() -Methode ab-
hängig vom konkreten Besucher und dem konkreten Daten tragenden Element. Die
Technik des Double-Dispatch wird ausführlich in [Bec08] beschrieben. Die Hin- und
Her-Aufrufe kommen also durch die Simulation von Double-Dispatch in Java zustande.
Varianten im Verhalten bedingt durch unterschiedliche Objektstrukturen
Es wurde bereits mehrfach erwähnt, dass die Beschreibung des dynamischen Verhal-
tens nur schematisch erfolgen kann, solange nicht die zu besuchende Objektstruktur
konkret betrachtet wird. Bisher wurde die Objektstruktur als eigenständiges Objekt be-
trachtet, das die enthaltenen Elemente "kennt" und, wie im Bild 4-54 zu sehen ist,
dafür sorgt, dass diese Elemente besucht werden. Diese Rolle kann aber auch von
einem anderen Objekt übernommen werden - abhängig davon, wie die Objektstruktur
konkret realisiert ist. Dadurch ergeben sich verschiedene Varianten des dynamischen
Verhaltens des Besucher-Musters. Die Rolle, die in der bisherigen Beschreibung des
Musters das Objekt der Klasse ObjektStruktur innehatte, kann alternativ auch:
x vom Client,
x von einem separaten Iterator-Objekt,
x einem Besucher-Objekt oder
x einer Datenstruktur, die die Elemente enthält (z. B. ein Baum),
übernommen werden. Diese Fälle werden im Folgenden vorgestellt:
x Client
Im einfachsten Fall nimmt der Client die Rolle der Objektstruktur an. Die Objekte
vom Typ KonkretesElementY sind einzelne, verstreute Instanzen ohne Bezug
zueinander oder befinden sich in einer einfachen Datenstruktur wie z. B. einem
Array. Der Client nimmt ein Objekt der vorhandenen Typen KonkretesElementY
( Y = A..Z ) nach dem anderen und sorgt dafür, dass es besucht wird, indem er
jeweils die akzeptieren() -Methode dieses Objekts aufruft und dabei das Objekt
vom Typ KonkreterBesucherX übergibt.
x Separates Iterator-Objekt
Wenn die Elemente der Objektstruktur gekapselt sind und die Objektstruktur ein
Iterator-Objekt zum Zugriff auf die Elemente anbietet, so wird das Iterator-Objekt
vom Client benutzt, um über die Menge der Objekte der vorhandenen Typen
KonkretesElementY ( Y = A..Z ) zu iterieren. Der Client ruft dabei die
akzeptieren() -Methode jedes Objekts auf, auf das er vom Iterator-Objekt eine
Referenz bekommt und übergibt hierbei das Objekt vom Typ Konkreter-
BesucherX . Die Reihenfolge der Besuche wird durch die Reihenfolge bestimmt, in
der das Iterator-Objekt die einzelnen Referenzen liefert.
Search WWH ::




Custom Search