Visitor-Idee
Das Visitor-Muster trennt Strukturtraversal von Operationen: Elemente accept(visitor), der Visitor definiert visit-Methoden pro Knotentyp.
Nützlich, wenn viele Operationen auf stabilen Strukturen laufen (Compiler-ASTs, Dokumentbäume).
Operation von Struktur trennen: ElementVisitor [1].
Wo gebraucht
Compiler-Frontends, Serialisierung über AST, Operationen über stabile Objektgraphen ohne die Knotentypen ständig zu öffnen.
Vertiefung
Das Visitor-Muster legt Operationen in Besucherklassen ab, während die Elemente einer heterogenen Struktur eine accept-Methode bereitstellen. Durch den Aufruf visitor.visit(this) wird sowohl der konkrete Besuchertyp als auch der konkrete Elementtyp in die Methodenauswahl einbezogen.
Neue Operationen lassen sich ergänzen, ohne jede Elementklasse mit weiterer Fachlogik zu füllen. Neue Elementtypen sind dagegen teuer, weil alle vorhandenen Visitor-Schnittstellen und Implementierungen erweitert werden müssen. Das Muster passt daher zu stabilen Elementhierarchien mit wechselnden Auswertungen.
Schwierigkeitsstufen
- accept und visit in einem kleinen Klassenmodell verfolgen.
- Double Dispatch gegenüber einfachem Überschreiben erklären.
- Erweiterungskosten für neue Operationen und neue Elemente vergleichen.
Fallstricke
Ein Visitor ist nicht bloss eine Sammlung von instanceof-Abfragen. Werden solche Fallunterscheidungen zentral beibehalten, gehen Typsicherheit und der eigentliche Dispatch-Vorteil verloren.
Sources
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Beginner
- Completed: 0 users