BEHAVIORAL

Visitor

Rappresentare un'operazione da eseguire sugli elementi di una struttura di oggetti. Visitor permette di definire una nuova operazione senza cambiare le classi degli elementi su cui opera.

Il Problema

Quando vuoi aggiungere operazioni a una gerarchia di classi senza modificare le classi stesse.

La Soluzione

Creare interfaccia Visitor con metodo visit() per ogni tipo di elemento. Gli elementi accettano visitor e chiamano metodo visit appropriato.

Struttura

Visitor interface con visit() per ogni ConcreteElement. Element interface con accept(visitor). ConcreteElement implementa accept().

Partecipanti:
Visitor - interfaccia con operazione visit per ogni ConcreteElement
ConcreteVisitor - implementa operazioni definite da Visitor
Element - interfaccia con accept(visitor)
ConcreteElement - implementa accept() che chiama visitor.visit(this)
Esempi di Codice

Visitor per Export System

Export di documenti in formati diversi (JSON, XML) senza modificare classi Document.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Compilers (AST traversal)
Document export (PDF, HTML, XML)
Tax calculation systems
Report generation
Serialization frameworks
Quando Usarlo
Quando vuoi aggiungere operazioni senza modificare le classi
Quando hai struttura di oggetti stabile ma operazioni che cambiano
Quando operazioni non correlate devono essere separate
Quando serve accesso a stato interno degli elementi
Quando NON Usarlo
Quando gerarchia di classi cambia spesso
Quando le operazioni sono semplici
Quando viola incapsulamento troppo