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