# data[].attributes.body
eventuelle Überarbeitung der Visitor-Klasse

Bei jeder nachträglichen Einführung eines neuen Elementes muss das Visitor-Interface mit der entsprechenden visit-Methode für das neue Element erweitern werden. Bereits bestehende Konkrete Visitor, welches das Visitor-Interface implementieren, müssen mit der visit-Methode für das neue Element nachträglich erweitert werden.

Das Visitor-Muster verletzt das Prinzip der Codekapselung. Es beinhaltet Code welcher auf eine Reihe unterschiedlicher Objekte angewendet wird und nicht in der eigenen Klasse enthalten sind. Ein Element der Struktur muss den konkreten Visitor nicht kennen. Der Visitor muss jedoch die Elemente kennen, da er mit den Methoden der Elementklasse interagiert.

# data[].attributes.body
sehr einfach erweiterbar (mit neuem Verhalten)

ein bestehendes System kann an zukünftige Anforderungen leicht angepasst werden

Zentralisierung von funktionellem Code

Visitor Objekt wird verwendet um die Elemente zu strukturieren, dadurch lassen sich Daten oder auch Zwischenergebnisse von Operationen zentral sammeln, speichern und weiterverarbeiten

# data[].attributes.body
Wenn eine Objektstruktur viele Klassen von Objekten mit unterschiedlichen Schnittstellen enthält und Operationen auf diesen Objekten ausgeführt werden sollen, die von ihren konkreten Klassen abhängen

Wenn viele unterschiedliche und nicht miteinander verwandte Operationen auf den Objekten einer Objektstruktur ausgeführt werden müssen und diese Klassen nicht mit diesen Operation „verschmutzt” werden sollen.

Wenn sich die Klassen, die eine Objektstruktur definieren, praktisch nie ändern, aber häufig neue Operationen für die Struktur definiert werden.

# data[].attributes.body
gehört zu den Verhaltensmustern

befasst sich mit Algorithmen und Zuweisung von Zuständigkeiten zu Objekten

beschreibt Muster von Objekten und Klassen und Muster der Interaktionen zwischen Ihnen

beschreibt komplexe Kontrollflüsse

verwandte Vorgänge auf eine Gruppe von Klassen auszuführen und diese Operationen in einer einzigen Klasse zu plazieren

# data[].attributes.body
UML Diagramm

# data[].attributes.body
ist ebenfalls ein Verhaltensmuster und soll dazu dienen, Struktur und Funktion (oder auch: Daten und Operationen) zu trennen

Es hilft dadurch, das open/closed-Prinzip (offen für Erweiterungen, geschlossen für Änderungen) zu realisieren

Erleichterung der Code-Wartbarkeit

# data[].attributes.body
Besuchermuster