16.2.2022 |

Visitor

Visitor Pattern

Das "visitor pattern" (Besucher) ist aus der Kategorie der Verhaltensmuster und ist eine Musterlösung dafür, einen Algorithmus von der Objektstruktur zu trennen, auf der er arbeitet. Durch die Kapselung ist es möglich, dass neue Operationen ohne Veränderung der betroffenen Elementklassen definiert werden.

Quelle: Wikipedia

Besucher (abstrakt): deklariert für jede Klasse konkreter Elemente eine Besuchsfunktion

Besucher1,… (konkret):

  • implementiert Besuchsfunktionen
  • Jede Besuchsfunktion ist ein Teil des Algorithmus, der auf die gesamte Objektstruktur angewendet wird.
  • Lokaler Zustand dient als Kontext für den Algorithmus.

Element (abstrakt): deklariert eine Operation zum Empfang eines Besuchers

ElementA,… (konkret): implementiert den Empfang eines Besuchers

Objektstruktur: Kollektion oder zusammengesetzte Objektstruktur

Praxis Beispiel:

Ein Einkaufen in einem Supermarkt wird häufig als Bild für die Funktionsweise des Visitor Patterns verwendet: Die einkaufende Person sammelt im Einkaufswagen die gewünschte Ware, die bildlich für das Set an Elementen der Objektstruktur steht. An der Kasse angekommen fungiert das kassierende Personal als Visitor, der die Preise und das Gewicht der einzelnen Shopping-Güter (bzw. Elemente) scannt, um die anfallenden Gesamtkosten zu errechnen.

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 mit Objekten aus voneinander unabhängigen Klassenhierarchien arbeiten.

Nachteile

  • Die gute Erweiterungsmöglichkeit der Klassen von Besuchern muss mit einer schlechten Erweiterbarkeit der Klassen der konkreten Elemente erkauft werden. Müssen neue konkrete Elemente hinzugefügt werden, so führt dies dazu, dass viele Besucher-besuche-Methoden implementiert werden müssen.
Patrick Schaper
Zur Übersicht

Mehr vom DevSquad...

Sven Röttering

Mediator Pattern

Sven Röttering

Command Pattern