Visitor-Idee

Beginner Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

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

  1. accept und visit in einem kleinen Klassenmodell verfolgen.
  2. Double Dispatch gegenüber einfachem Überschreiben erklären.
  3. 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

University approvals: 0
Tasks
Question 1

Was entkoppelt das Visitor-Muster?

Question 2

Für welche Entwicklung ist das Visitor-Muster besonders passend?

Question 3

Implementiere accept in Num und Add. EvalVisitor soll Ausdrücke aus Zahlen und Additionen auswerten.

Hint

Jede accept-Methode ruft die passende überladene visit-Methode auf. Felder der besuchten Objekte sind über den Parameter erreichbar.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Beginner
  • Completed: 0 users
Creator
Best
Best
BestBuddy