Java Reference
In-Depth Information
Für jede zu realisierende Operation wird eine Besucher-Klasse
bereitgestellt, die einen Satz von überladenen besuchen() -Me-
thoden enthält und zwar jeweils eine separate besuchen() -Me-
thode für jede in der Objektstruktur vorhandene Element-Klasse.
Jede besuchen() -Methode hat einen Übergabeparameter vom Typ einer der Ele-
ment-Klassen und kann über diesen Parameter auf die Daten des besuchten Objekts
der Objektstruktur zugreifen. Eine Besucher-Klasse muss gegebenenfalls noch Metho-
den bereitstellen, mit deren Hilfe sich eine Anwendung die Ergebnisse einer Operation
von einem Besucher-Objekt abholen kann.
Die akzeptieren() -Methode einer Element-Klasse hat als
Übergabeparameter ein Besucher-Objekt. Das Objekt, dessen
akzeptieren() -Methode aufgerufen wird, ruft im Rumpf der
akzeptieren() -Methode die für eine Elementklasse spezi-
fische besuchen() -Methode des übergebenen Besuchers auf
und übergibt dabei eine Referenz auf sich selbst.
Dadurch kann die gerufene besuchen() -Methode - beispielsweise über öffentliche
get-Methoden - auf die Daten des betreffenden Objekts der Objektstruktur zugreifen.
Diese Hin- und Her-Aufrufe werden als simuliertes Double-Dispatch bezeichnet und
in Kapitel 4.16.3.3 noch genauer beschrieben.
Zur Lösung wird eine abstrakte Klasse Besucher eingeführt, von der alle konkreten
Besucher-Klassen abgeleitet sind. Die abstrakte Klasse Besucher wird als Typ für
den jeweiligen Übergabeparameter der akzeptieren() -Methoden in den Element-
Klassen gewählt. Die Übergabeparameter der akzeptieren() -Methoden können auf
Grund des liskovschen Substitutionsprinzips auf jeden konkreten Besucher zeigen, so-
fern in den konkreten Besucher-Klassen die Verträge der abstrakten Klasse nicht ge-
brochen werden. Die folgende Beschreibung des Musters verwendet für die Abstrak-
tion der Besucher-Klassen eine abstrakte Klasse. Die Abstraktion könnte aber genau-
so gut mittels eines Interface definiert werden. Die konkreten Besucher-Klassen müs-
sten dann dieses Interface realisieren, statt von der abstrakten Klasse abzuleiten.
Sieht man von der erstmaligen Einführung einer solchen akzep-
tieren() -Methode in den Element-Klassen ab, so bleiben die
Element-Klassen unverändert. Die Realisierung einer neuen Ope-
ration erfordert dann nur die Implementierung der besuchen() -
Methoden in einer neuen Besucher-Klasse. Damit ist die Logik
dieser neuen Operation selbst nicht über viele Objekte verteilt,
sondern nur die Datenbeschaffung.
Dieser Ansatz weicht von dem Grundgedanken der Objektorientierung ab, die Daten
eines Objekts und die zu den Daten gehörenden Prozeduren, die auf den Daten ope-
Search WWH ::




Custom Search