I visitor pattern (o modello del visitatore) è un pattern comportamentale di progettazione che permette di aggiungere nuove operazioni a una struttura di oggetti esistente senza modificarne la struttura stessa. In sostanza, separa l'algoritmo dall'oggetto su cui opera.
Come funziona:
Elemento (Element): Definisce un'interfaccia accept()
che accetta un oggetto Visitor
come argomento. Ogni classe concreta Element
implementa il metodo accept()
e chiama il metodo visit()
corrispondente dell'oggetto Visitor
che ha ricevuto.
Visitor: Definisce un'interfaccia visit()
per ogni tipo di Element
concreto. Ogni metodo visit()
prende un oggetto Element
specifico come argomento.
Visitor Concreto (ConcreteVisitor): Implementa ogni metodo visit()
definito nell'interfaccia Visitor
. Ogni metodo visit()
contiene la logica specifica da eseguire sull'elemento corrispondente.
Elemento Concreto (ConcreteElement): Implementa l'interfaccia Element
. Ogni classe concreta Element
sa come essere "visitata" da un Visitor
specifico. All'interno del metodo accept()
, viene chiamato il metodo visit()
appropriato del Visitor
.
Benefici:
Visitor
concreti) senza modificare le classi Element
. Questo rispetta il principio di Open/Closed Principle.Visitor
possono essere usati con la stessa struttura di oggetti.Svantaggi:
Element
e Visitor
.Element
cambia frequentemente, è necessario modificare tutti i Visitor
, violando il principio di Open/Closed Principle in questo caso.Esempio d'uso:
Immagina una struttura di documenti XML. Potresti avere Element
come <tag>
, <attribute>
, <text>
. Con il visitor pattern, potresti creare Visitor
che:
Concetti chiave:
Element
: Interfaccia che definisce il metodo accept()
.Visitor
: Interfaccia che definisce i metodi visit()
per ogni tipo di Element
.ConcreteVisitor
: Implementa la logica specifica per ogni elemento.ConcreteElement
: Implementa l'interfaccia Element
e sa come essere "visitato".Il pattern Visitor è utile quando si ha una struttura di oggetti che raramente cambia, ma si desidera eseguire molte operazioni diverse su quegli oggetti.
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page