Java Reference
In-Depth Information
x Möglichkeit Klassenhierarchien-übergreifender Besuche
Besucher können Element-Objekte besuchen, die nicht Teil derselben Klassenhie-
rarchie sind. Im Gegensatz zum Iterator-Muster setzt der Besucher nicht voraus,
dass die zu besuchenden Objekte innerhalb einer Objektstruktur eine gemeinsame
Basisklasse haben. Es wird nur eine passende akzeptieren() -Methode verlangt.
x Sammeln von Informationen
Das Besucher-Muster ermöglicht das Ansammeln von Zustandsinformationen der
besuchten Objekte über mehrere Besuche hinweg.
x Verbesserung der Wartbarkeit
Muss eine Operation, die in einer Besucher-Klasse implementiert ist, angepasst
werden, reicht es meist aus, die entsprechende Besucher-Klasse zu ändern, weil
die Logik der Operation nicht über alle Element-Klassen verteilt ist.
x Möglichkeit, Frameworks zu erweitern
Steht ein Framework nur in Form einer Bibliothek zur Verfügung und nicht als
Quellcode, so besteht das Vorgehen darin, von den Framework-Klassen abzuleiten
und in den abgeleiteten Klassen jeweils eine akzeptieren() -Methode zu imple-
mentieren. Wirklich lohnenswert ist dieser Ansatz allerdings nur dann, wenn man
dies durchführt, bevor Code geschrieben wird, der die Klassen des Frameworks
verwendet, da sonst der gesamte, bereits existierende und möglicherweise ge-
testete und freigegebene Code geändert werden muss.
4.16.4.2 Nachteile
Folgende Nachteile werden gesehen:
x Hoher Aufwand beim Hinzufügen von Element-Klassen
Für jede neue zu besuchende Klasse KonkretesElementY muss eine neue be-
suchen() -Methode in der abstrakten Klasse Besucher definiert werden, die einen
Parameter vom Typ der neuen Klasse hat. Ebenso müssen alle konkreten Besu-
cher-Klassen um die Implementierung dieser Methode ergänzt werden. Das bedeu-
tet, dass es schwierig ist, dieses Muster nachträglich zu implementieren.
x Hoher Aufwand bei der nachträglichen Anwendung des Musters
Wenn Element-Klassen bereits existieren und das Besucher-Muster nachträglich
auf diese Element-Klassen angewendet werden soll, müssen zuerst alle Element-
Klassen um eine akzeptieren() -Methode erweitert werden. Das bedeutet, dass
es schwierig ist, dieses Muster nachträglich zu implementieren.
x Overhead
Durch das simulierte "double dispatch" in der Methode akzeptieren() entsteht
zusätzlicher Aufwand, der die Performance verschlechtert.
x Aufweichung der Kapselung privater Daten
Ein konkreter Besucher braucht eine ganze Reihe von Attributen der besuchten
Elemente. Er kann nur auf die öffentlichen Daten der Objekte zugreifen, die er be-
sucht. Die Anwendung des Besucher-Musters kann daher dazu führen, dass man
private Daten der Objekte öffentlich zugänglich macht.
Search WWH ::




Custom Search