Java Reference
In-Depth Information
In der hier vorgestellten Lösung sind die besuchen() -Methoden überladen: sie unter-
scheiden sich nicht durch ihren Namen, sondern nur durch den Typ des Parameters.
Da aber jede besuchen() -Methode des Besuchers nur aus genau einer Element-
Klasse heraus aufgerufen wird und durch die übergebene Selbstreferenz immer die zu
dieser Element-Klasse passende besuchen() -Methode aufgerufen wird, wird der
Overloading-Mechanismus eigentlich gar nicht benötigt, d. h., dass die besuchen() -
Methoden sich auch im Namen unterscheiden und beispielsweise besucheKonkre-
tesElementY() genannt werden könnten.
Der Client steht im Klassendiagramm in Bild 4-53 stellvertretend für eine Anwendung
des Besucher-Musters. Der Client kennt die Objektstrukur und möchte auf dieser Ob-
jektstrukur eine Besuchsoperation ausführen. Das Muster legt nicht fest, ob der Client
ein Besucher-Objekt, das eine Operation realisiert, selber erzeugt oder ob ein Be-
sucher-Objekt ihm von außen übergeben wird. Der Client stößt den Besuch der Ob-
jektstruktur durch das Besucher-Objekt an. Wie bereits erwähnt wurde, kann dieser
Ablauf je nach Objektstruktur unterschiedlich sein (siehe Kapitel 4.16.3.3). Wenn die
Objektstruktur beispielsweise ein einfaches Array ist, iteriert der Client über die Ele-
mente des Arrays und ruft für jedes Element dessen akzeptieren() -Methode auf.
4.16.3.2 Teilnehmer
Am Besucher-Entwurfsmuster nehmen die folgenden Klassen teil:
Besucher
Die abstrakte Klasse Besucher deklariert eine besuchen() -Methode für jede Klasse
KonkretesElementY (Y = A..Z) . Jede besuchen() -Methode hat jeweils einen
Parameter vom Typ einer Klasse KonkretesElementY .
KonkreterBesucherX (X = 1..n)
Instanzen einer Klasse KonkreterBesucherX sind die eigentlichen Besucher. Eine
Klasse KonkreterBesucherX leitet von der abstrakten Klasse Besucher ab und im-
plementiert in ihren besuchen() -Methoden jeweils die spezielle Operation, die mit
den Daten der besuchten Objekte der Klasse KonkretesElementY ausgeführt wird.
Element
Die Klassen der Objekte, die besucht werden sollen, sind von der abstrakten Klasse
Element abgeleitet 64 . Die Klasse Element enthält die Deklaration der akzeptie-
ren() -Methode mit einem Parameter vom Typ der abstrakten Klasse Besucher .
KonkretesElementY (Y = A..Z)
Instanzen dieser Klassen, die von der abstrakten Klasse Element abgeleitet werden,
sind die eigentlichen Daten tragenden Objekte und bilden die Objektstruktur. Sie
werden von den Objekten vom Typ KonkreterBesucherX aufgesucht, die mit den
Daten der besuchten Objekte ihre gewünschten Funktionalitäten erbringen. Die
konkreten Element-Klassen implementieren die in der Basisklasse Element dekla-
64 Das Besucher-Muster wird oftmals so implementiert. Das Muster verlangt jedoch streng genommen
nur, dass die Klassen KonkretesElementY eine akzeptieren() -Methode haben.
Search WWH ::




Custom Search