Besucher [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Beispiel

Im vorliegenden Beispiel wenden wir  konkrete Besucher  auf elementare  geometrische Objekte, sogenannte Primitive, an.  Es ist wünschenswert, daß sich diese Grundbausteine einer Graphikanwendung während der Softwareentwicklung und bei möglicher Wiederverwendung nicht ändern. Die auf diese Objekte wirkenden Operationen, in diesem Fall Bewegungen, können hingegen Veränderungen unterworfen sein. Um diese Trennung zu ermöglichen, werden die Operationen in eine getrennte Klasse visitor ausgelagert und die Graphikobjekte mit einer Methode zum Empfang eines solchen Besuchers versehen. Ein  konkreter Besucher  kann verschiedene Objekte besuchen , die nicht notwendigerweise vom gleichen Vorfahren  abstammen.

Zur  Implementation:

Die Graphikobjekte point, line und circle  stammen  von der abstrakten Klasse primitive ab, die die  gemeinsame Schnittstelle dieser Klassen definiert. Es gibt eine Methode zeichne() zur Bildschirmausgabe und eine Methode receive() zum Empfang eines Besuchers. Die Bewegungen movevisitor, mirrorvisitor und rotatevisitor  stammen alle von der abstrakten Klasse visitor  ab. Jede von ihnen implementiert konkrete Methoden zum Besuch der verschiedenen Graphikobjekte, nämlich visitPOINT(), visitLINE() und visitCIRCLE(). Wird die Methode receive(), die als Parameter einen visitor erwartet, eines Graphikobjekts aufgerufen, wird die zum Objekt passende Methode des Besuchers aufgerufen. Als Parameter dient dabei das Objekt selbst (this). Die Methode des Besuchers   kann jetzt Veränderungen am Objekt vornehmen. Dazu ist es natürlich nötig,  daß die Eigenschaften der Graphikobjekte von außen zugänglich sind, was ein Nachteil des Musters Besucher ist.
Die Klasse Application  demonstriert das beschriebene Zusammenspiel der Klassen. Es werden Paare von zufälligen, aber identischen Graphikobjekten erzeugt. Eines der Objekte empfängt einen  zufälliger Besucher. Dann werden beide Objekte in verschieden Listen für die graphische Ausgabe abgelegt.

 Abb. 1: Die Struktur des Beispiels




Beispiel


No Java for you.

Java-Applet



[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.03.2005