Java Reference
In-Depth Information
Beim Einsatz von Programmiersprachen wie Java oder C# kann diese Variante
auch implizit auftreten, nämlich, wenn für die Speicherung der Objekte vom Typ
KonkretesElementY eine Collection-Klasse verwendet wird und, wenn eine for-
each -Schleife eingesetzt wird, um über diese Objekte zu iterieren. Bei dieser im-
pliziten Variante sieht man praktisch keinen Unterschied zum ersten Fall, bei dem
der Client die Rolle der Objektstruktur annimmt, da aus der Sicht eines Client eine
Collection sich so trivial nutzen lässt wie eine einfache Objektstruktur.
x Besucher-Objekt
Das Besucher-Objekt übernimmt selbst die Rolle der Objektstruktur, wenn es Refe-
renzen auf alle zu besuchenden Objekte enthält.
x Datenstruktur der Elemente
Sind die Objekte vom Typ KonkretesElementY in einer verketteten Form wie
etwa einem Baum abgelegt, übernimmt diese Datenstruktur die Rolle der Objekt-
struktur und die Besuchsreihenfolge wird über diese Verkettung festgelegt. Der
Client ruft die akzeptieren() -Methode eines Objekts vom Typ Konkretes-
ElementY - im Fall eines Baums die des Wurzelknotens auf - und übergibt das
Objekt vom Typ KonkreterBesucherX . Das besuchte Objekt sorgt in seiner
akzeptieren() -Methode dafür, dass alle mit ihm verknüpften Objekte besucht
werden.
Bei einer baumartigen Struktur entscheidet der besuchte Knoten dann über die
Durchlaufstrategie durch den Baum. Er kann beispielsweise zuerst seine Kind-
knoten und anschließend sich selbst besuchen lassen, was zu einer Depth-First
Strategie führt.
Besonders aufwendig gestaltet sich die Implementierung, wenn die Daten tragen-
den Objekte in einem Graphen angeordnet sind, der auch Zyklen enthalten kann.
Die Möglichkeit, dass ein Objekt während eines Durchlaufens der Struktur mehrfach
besucht wird, muss in der Regel ausgeschlossen werden.
Die hier beschriebene Variante gilt auch für Datenstrukturen, die mit Hilfe des Kom-
positum-Musters implementiert werden. Ein zusammengesetztes Element ruft in sei-
ner akzeptieren() -Methode sowohl die besuchen() -Methode für sich selbst als
auch die akzeptieren() -Methode aller von ihm referenzierten Elemente auf. Ein
Blatt-Element ruft nur die besuchen() -Methode für sich auf.
4.16.3.4 Programmbeispiel
Der nachfolgende Quellcode beschreibt ein Beispiel, bei dem ein Objekt vom Typ Ge-
haltsdrucker Elemente vom Typ Teamleiter und Sachbearbeiter besucht.
Die Klasse Gehaltsdrucker nimmt hier die Funktion der Besucher-Klasse ein. In
Abhängigkeit von der Klasse des besuchten Objekts wird die richtige Methode aufge-
rufen und die entsprechende Gehaltszeile ausgedruckt.
Zum besseren Verständnis des Beispielprogramms wird zu jeder Klasse separat mit
angegeben, welcher Klasse im Bild 4-53 sie entspricht.
Search WWH ::




Custom Search