Klassifizierung  | 
       
objektbasiertes Verhaltensmuster
  | 
  |  | 
     
     
       Zweck  | 
       
         | 
     
     
        | 
       
Verzweigen über die Klassenhierarchien
von 2 Argumenten 
"double dispatch"
         | 
     
     
        | 
       
Entkoppeln der Verarbeitungsschritte von den
Traversierungsschritten bei
einer zusammengesetzten Struktur 
-->  Kompositum
 | 
  |  | 
     
     
       Alias  | 
       
Visitor
  | 
  |  | 
     
     
       Motivation  | 
       
gegeben: eine Baumstruktur 
Ziel: die Knoten dieser Struktur auf unterschiedliche
 Arten verarbeiten
  | 
  |  | 
     
     
       Beispiel  | 
       
DOM Baum eines XML/HTML Dokuments
         | 
     
     
        | 
        als abstrakter Syntaxbaum ausgeben
         | 
     
     
        | 
       Text extrahieren
         | 
     
     
        | 
       Attribute überprüfen
         | 
     
     
        | 
       transformieren
         | 
     
     
        | 
       ...
  | 
  |  | 
     
     
       Anwendbarkeit  | 
       
         | 
     
     
        | 
       viele unterschiedliche Objekte einer
 Hierarchie verarbeiten
  | 
        | 
        UND
         | 
     
     
        | 
       viele unterschiedliche Operationen
 auf einer Objektstruktur ausführen
         | 
     
     
        | 
       
 zum Bündeln der Methoden eines Verarbeitungsprozesses
 in einer Klasse
         | 
     
     
        | 
       
 Objektstruktur über die Lebensdauer eines
 Programms fest 
 Verarbeitungsarten aber variabel
         | 
     
     
        | 
       
 wenn alle Objekte eines Kompositums verarbeitet
 werden sollen 
 nicht: gezieltes Selektieren
  | 
  |  | 
     
     
       Struktur  | 
       
Strukturdiagramm
  | 
  |  | 
     
     
       Teilnehmer  | 
       
         | 
     
     
          Element | 
        abstrakte Klasse der zu
 verarbeitenden Objekte
         | 
     
     
          Element[A-B] | 
       konkrete Klassen
 für die verschiedenen Ausprägungen 
 rufen jede eine Spezialmethode von Prozess
 auf für die spezielle Ausprägung
         | 
     
     
          Prozess | 
       
 die Besucher-Schnittstelle der Verarbeitungsprozesse 
 enthält für jede Element-Klasse eine
 Methode
         | 
     
     
        | 
       
 neue Elementklasse 
 --> Prozess-Schnittstelle erweitern
         | 
     
     
          Prozess[1-2] | 
       
 konkrete Verarbeitungsprozesse
  | 
  |  | 
     
     
       Konsequenzen  | 
       
         | 
     
     
        | 
       Erweiterung um
 neue Operationen auf der komplexen Struktur
 einfach
         | 
     
     
        | 
       
 logisch zusammenhängende Operationen
 stehen gebündelt in einer Besucher-Klasse
         | 
     
     
        | 
       
 Erweitern um neue Element-Klassen schwer 
 alle konkreten Besucher müssen erweitert werden
         | 
     
     
        | 
       
 Besucher-Hierarchien mit default-Implementierungen
 erleichtern die Erweiterbarkeit
         | 
     
     
        | 
       
 in den Besucher-Objekten kann Zustandsinformation
 angesammelt werden 
 Vorsicht bei Rekursion, wenn diese Zustandsinformation
 nicht global gültig ist
         | 
     
     
        | 
       
 Besucher müssen auf die Daten der einzelnen
 Varianten (schnell) zugreifen können 
 --> Kapselung aufbrechen.
  | 
  |  | 
     
     
       Beispiele  | 
       
         | 
     
     
        | 
        | 
     
     
        | 
        | 
     
     
        | 
        | 
  |  | 
     
     
       Bekannte Verwendungen  | 
       
Traversierung von Komposita 
aus C: Abstraktion mit Funktionen für binäre Bäume
  | 
  |  | 
     
     
       verwandte Muster  | 
       
         | 
     
     
        | 
       Datenstrukturen
können mit Besuchern einfach verarbeitet werden
  | 
  |  | 
     
     
        | 
       
ist eine Vereinfachung 
es gibt es nur eine Art
zu verarbeitender Objekte, also nur eine Methode
in der Kommando-Klasse
  | 
  |  |