Java Reference
In-Depth Information
4.16.5
Einsatzgebiete
Voraussetzung für den Einsatz des Besucher-Musters ist, dass die vorhandenen Ele-
ment-Klassen nicht geändert werden sollen. Dieses Entwurfsmuster bietet sich an,
wenn eine Objektstruktur mit vielen Element-Klassen und verschiedenen Schnittstellen
zentral von einem Kontrollobjekt (Besucher-Objekt) bearbeitet werden soll, wobei eine
einzelne Teil-Operation auf einem Objekt von dessen Daten abhängt. Da jede Be-
sucher-Klasse geändert werden muss, wenn eine neue Element-Klasse für die Objekt-
struktur benötigt wird, ist es günstig, wenn sich die Menge der Element-Klassen der
Objektstruktur so wenig wie möglich ändert. Neue Operationen - also Besucher-Klas-
sen - können problemlos definiert werden.
Soll den Objekten einer Kompositum-Struktur eine neue Funktionalität hinzugefügt
werden, die sich nicht nur auf ein einzelnes Objekt sondern auf alle Objekte der Struk-
tur bezieht, dann müssen in der Regel ein oder mehrere Methoden in der Basisschnitt-
stelle eingeführt werden. Eine Änderung an der Basisschnittstelle, wie z. B. das Hinzu-
fügen einer neuen Methode, führt aber dazu, dass alle davon abgeleiteten Klassen po-
tenziell ebenfalls geändert werden müssen.
Um diesem Effekt entgegenzuwirken, kann das Kompositum-Muster mit dem Entwurfs-
muster Besucher kombiniert werden. Das Entwurfsmuster Besucher ermöglicht es,
dass einer Kompositum-Struktur eine neue, objektübergreifende Funktionalität flexibel
hinzugefügt werden kann, ohne die Klassen der Kompositum-Struktur ändern zu
müssen. Diese Vorteile des Besucher-Musters können auch bei Objektstrukturen er-
zielt werden, die nach dem Kompositum-Muster (siehe Kapitel 4.7) aufgebaut wur-
den. Hierauf wurde bereits in Kapitel 4.16.3.3 eingegangen.
4.16.6
Ähnliche Entwurfsmuster
Ebenso wie ein Besucher realisiert ein Dekorierer eine neue Funktionalität. Das Besu-
cher-Muster erlaubt es, zu einer Datenstruktur eine neue Funktion hinzuzufügen, die
auf allen Objekten der Datenstruktur arbeitet. Mit dem Dekorierer-Muster können je-
doch nur einzelne Objekte erweitert werden. Ein weiterer Unterschied ist, dass beim
Besucher-Muster die zu besuchenden Objekte auf den Besuch "vorbereitet" sein
müssen, dadurch dass sie eine entsprechende Methode dem Besucher zur Verfügung
stellen.
Ein Iterator und ein Besucher sind sich insofern ähnlich, als dass sie sich über die Ele-
mente einer Datenstruktur hinweg bewegen. Die Aufgabe eines Iterators beschränkt
sich auf einen solchen Durchlauf der Datenstruktur, während ein Besucher zusätzlich
während des Durchlaufs eine Funktionalität erbringt. Wie bereits erwähnt wurde, kann
ein Besucher einen Iterator nutzen, um die Datenstruktur zu durchlaufen. Weiterhin
setzt das Iterator-Muster voraus, dass die Objekte der Datenstruktur eine gemeinsame
Basisklasse haben. Das Besucher-Muster verlangt hingegen nur, dass die Objekte der
Datenstruktur eine passende akzeptieren() -Methode besitzen. Beim Besucher-
Muster liegt außerdem der Fokus darauf, dass weitere Besucher mit anderer Funktio-
nalität flexibel zu einer Datenstruktur hinzugefügt werden können.
Search WWH ::




Custom Search