23
Besucher Muster Sebastian Grahn Sebastian Kühn

Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Embed Size (px)

Citation preview

Page 1: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Besucher Muster

Sebastian GrahnSebastian Kühn

Page 2: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Gliederung1. Zweck

2. Anwendbarkeit

3. Struktur

4. Teilnehmer

5. Interaktionen6. Vor- & Nachteile

7. Implementierung

8. Beispiele

9. Bekannte Verwendung

10. Verwandte Muster

Page 3: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

1. Zweck1. Zweck

Kapselung einer auf Elementen einer Objektstruktur auszuführenden Operation

Ermöglicht Definition neuer Operationen ohne Klassen der von ihr bearbeiteten Elemente zu verändern

Page 4: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

2. Anwendbarkeit

viele unterschiedliche, nicht verwandte Operationen auf einer Objektstruktur realisiert werden sollen.

sich die Klassen der Objektstruktur nicht verändern. häufig neue Operationen auf der Objektstruktur

integriert werden müssen. ein Algorithmus über die Klassen einer

Objektstrukur verteilt arbeitet, aber zentral verwaltet werden soll.

Das Besuchermuster kann verwendet werden, wenn:

Page 5: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

3. Struktur

Page 6: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

4. Teilnehmer (I)

Besucher : definiert für jede Klasse konkreter Elemente eine

Besuchsfunktion kann unter Verwendung der konkreten

Schnittstelle auf das Element zugreifen

KonkreterBesucher : implementiert in Besucherklasse deklarierte

Besuchsfunktionen jede Besuchsfunktion ist ein Fragment des

Algorithmus für die gesamte Objektstruktur lokaler Zustand als Kontext für den Algorithmus

(enthält häufig Ergebnisse)

Page 7: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

4. Teilnehmer (II)

Element : definiert eine Schnittstelle zum Empfang eines

Besuchers (NimmEntgegen-Operation)

KonkretesElement : implementiert den Empfang eines Besuchers

(NimmEntgegen-Operation)

Page 8: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

4. Teilnehmer (III)

ObjektStruktur : Kann seine Elemente aufzählen Evtl. abstrakte Schnittstelle, die Besucher erlaubt

Elemente zu besuchen Kann Kompositionsmuster oder Behälter (Liste

oder Menge) sein

Page 9: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

5. Interaktionen (I)

Klient erzeugt KonkretesBesucher-Objekt und traversiert Objektstruktur, wobei es jedes Element mit Besucher besucht

Wenn Element besucht wird, ruft es die seiner Klasse entsprechenden Operationen auf und übergibt sich selbst als Argument damit Besucher auf Zustand zugreifen kann

Page 10: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

5. Interaktion (II)

Page 11: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

6. Vor- & Nachteile Vorteile :

Neue Operationen lassen sich leicht durch die Definition neuer Besucher hinzufügen

Verwandte Operationen werden im Besucher zentral verwaltet und von besucherfremden Operationen getrennt

Besucher können über mehreren Klassenhierarchien arbeiten

Nachteile : Neue Klassen konkreter Elemente erfordern

Erweiterungen in allen Besuchern

Page 12: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

7. Implementierung (I)

Besucherklasseclass Besucher {

puplic:

virtual void BesucheElementA(ElementA*);

virtual void BesucheElementB(ElementB*);

//und so weiter für die anderen konkreten //Elementklassen

protected:

Besucher();

};

Page 13: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

7. Implementierung (II)

Konkrete Elementklassenclass Element {

puplic:

virtual ~Element();

virtual void NimmEntgegen(Besucher&) = 0;

protected:

Element();

};

Page 14: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

7. Implementierung (III)

class ElementA : puplic Element {ElementA();virtual void NimmEntgegen(Besucher& Besucher) {

besucher.BesucheElementA(this);};

};

class ElementB : puplic Element {ElementB();virtual void NimmEntgegen(Besucher& Besucher) {

besucher.BesucheElementB(this);};

};

Page 15: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

7. Implementierung (IV) Implementierungsaspekt (I)

Double-Dispatch ausgeführte Operation hängt von Art der

Anfrage und den Typen zweier Empfänger ab NimmEntgegen hängt ab vom Typ des

Besucher und dem des Elements Verwendung Double-Dispatch ( z.B. CLOS)

Single-Dispatch (Zur Erläuterung) ausgeführte Operation hängt von Namen der

Anfrage und Typ des Empfängers ab (z.B. C++)

Page 16: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

7. Implementierung (V) Implementierungsaspekt (II)

Zuständigkeit für Traversierung Besucher muss jedes Element der Objektstruktur

besuchen Zuständigkeit der Traversierung an 3 Stellen

möglich: in Objektstruktur, im Besucher oder in einem Iterator (siehe Vortrag)

Häufig in Objektstruktur durch einfache Iteration über Elemente (Behälter)

In Besucher wenn komplexe Traversierung, die von Ergebnissen von Operationsaufrufen abhängt

Page 17: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

8. Beispiel Virtuelles Reisebüro

- verschiedene Busreisen, Ferienhäuser und Mietwagen mit Beschreibung,

Preiskategorie (Sommer/Winter), Bilder und technische Daten

- Preise der Kategorien sind in einem Preismodul gespeichert

- die Klassen für Busreisen, Ferienhäuser, Mietwagen und Preismodul

enthalten Schnittstelle zum Empfang eines Besuchers

- ein Kunde stellt eine Reise zusammen

Page 18: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Kunde möchte Gesamtpreis erfahren:

- Ein Besucher besucht die interessierenden Objekte mit Hilfe eines Zählers und fragt die jeweilige Kategorie ab- Zuletzt berechnet er im Preismodul mit Hilfe seiner lokal gesammelten Informationen den Gesamtpreis

Kunde will Reise buchen:

- Ein anderer Besucher erstellt Reisebestellung…

- dazu besucht er alle, den Kunden interessierenden Objekte…- Sein lokaler Zustand besteht aus einem Dokument, dass er gemäß der Informationen der Objekte gestaltet- Beim besuch des Preismoduls ergänzt er die Preise dazu

Page 19: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

9. Bekannte Verwendungen

Smalltalk80-Übersetzer Besucherklasse : ProgramNode-Enumerator Hauptsächlich zur Analyse von Quelltexten

IRIS-Inventor [Str93] Entwicklung von 3D-Anwendungen Hierarchie von Knoten (geometrische Objekte oder

Attribut eines geom. Objekts) Besucher : Actions

Zur Auswertung, zur Ereignisbehandlung, zum Suchen, zum Speichern und zum Bestimmen von Begrenzungsrahmen

Page 20: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

10. Verwandte Muster

Kompositionsmuster Um Operationen auf eine mit Hilfe des

Kompositionsmusters definierte Struktur anzuwenden

Interpreter Die Interpretation einer Objektstruktur als ein

Interpreter auszuführen

Page 21: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Vielen Dank für Ihre Aufmerksamkeit...

... Und einen angenehmen Feierabend.ende

Page 22: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Zusatz (I) Public Class Busreise {

… void nimmentgegen(Besucher b) {b.Busreisebesucher(this);}

} public Class Ferienhaeuser

… Void nimmentgegen (Besucher b) {b.Ferienhausbesucher(this);

}}

public Class Mietwagen {… void nimmentgegen (Besucher b) {

b.Mietwagenbesucher(this);}

}

Page 23: Besucher Muster Sebastian Grahn Sebastian Kühn. Gliederung 1. Zweck 2. Anwendbarkeit 3. Struktur 4. Teilnehmer 5. Interaktionen 6. Vor- & Nachteile 7

Zusatz (II)

public Class Besucher {Void Busreisbesucher(Busreise b);Void Ferienhausbesucher(Ferienhaus f);Void Mietwagenbesucher(Mietwagen m);

}

Public Class Gesamtpreisbesucher implements Besucher {Gesamtpreisbesucher();int GibGesamtPreis();int gesamt=0;Void Busreisebesucher(busreise b) {

gesamt += b.getPreis();}Void Ferienhausbesucher(Ferienhaus f) {

gesamt += f.getPreis();}Void Mietwagenbesucher(Mietwagen m) {

gesamt += m.getPreis();}