Design Patterns - Visitor Pattern
Nel pattern Visitor, usiamo una classe Visitor che cambia l'algoritmo di esecuzione di una classe element. In questo modo, l'algoritmo di esecuzione dell'elemento può variare al variare del visitatore. Questo modello rientra nella categoria del modello di comportamento. Secondo il modello, l'oggetto elemento deve accettare l'oggetto visitatore in modo che l'oggetto visitatore gestisca l'operazione sull'oggetto elemento.
Implementazione
Creeremo un'interfaccia ComputerPart che definisca l'operazione di accettazione. Tastiera , mouse , monitor e computer sono classi concrete che implementano l' interfaccia ComputerPart . Definiremo un'altra interfaccia ComputerPartVisitor che definirà le operazioni di una classe visitatore. Il computer utilizza un visitatore concreto per eseguire l'azione corrispondente.
VisitorPatternDemo , la nostra classe demo, utilizzerà le classi Computer e ComputerPartVisitor per dimostrare l'uso del pattern del visitatore.
Passo 1
Definisci un'interfaccia per rappresentare l'elemento.
ComputerPart.java
public interface ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
}
Passo 2
Crea classi concrete che estendono la classe precedente.
Keyboard.java
public class Keyboard implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Monitor.java
public class Monitor implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Mouse.java
public class Mouse implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Computer.java
public class Computer implements ComputerPart {
ComputerPart[] parts;
public Computer(){
parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};
}
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
for (int i = 0; i < parts.length; i++) {
parts[i].accept(computerPartVisitor);
}
computerPartVisitor.visit(this);
}
}
Passaggio 3
Definisci un'interfaccia per rappresentare il visitatore.
ComputerPartVisitor.java
public interface ComputerPartVisitor {
public void visit(Computer computer);
public void visit(Mouse mouse);
public void visit(Keyboard keyboard);
public void visit(Monitor monitor);
}
Passaggio 4
Crea un visitatore concreto implementando la classe sopra.
ComputerPartDisplayVisitor.java
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
@Override
public void visit(Computer computer) {
System.out.println("Displaying Computer.");
}
@Override
public void visit(Mouse mouse) {
System.out.println("Displaying Mouse.");
}
@Override
public void visit(Keyboard keyboard) {
System.out.println("Displaying Keyboard.");
}
@Override
public void visit(Monitor monitor) {
System.out.println("Displaying Monitor.");
}
}
Passaggio 5
Utilizzare ComputerPartDisplayVisitor per visualizzare parti di Computer .
VisitorPatternDemo.java
public class VisitorPatternDemo {
public static void main(String[] args) {
ComputerPart computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());
}
}
Passaggio 6
Verifica l'output.
Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.