Design Patterns - Besuchermuster
Im Besuchermuster verwenden wir eine Besucherklasse, die den Ausführungsalgorithmus einer Elementklasse ändert. Auf diese Weise kann der Ausführungsalgorithmus des Elements variieren, wenn sich der Besucher ändert. Dieses Muster fällt unter die Kategorie Verhaltensmuster. Gemäß dem Muster muss das Elementobjekt das Besucherobjekt akzeptieren, damit das Besucherobjekt die Operation für das Elementobjekt ausführt.
Implementierung
Wir werden eine ComputerPart- Schnittstelle erstellen , die Akzeptieren definiert. Tastatur , Maus , Monitor und Computer sind konkrete Klassen, die die ComputerPart- Schnittstelle implementieren . Wir werden eine weitere Schnittstelle ComputerPartVisitor definieren, die eine Besucherklasse definiert. Der Computer verwendet einen konkreten Besucher, um entsprechende Aktionen auszuführen.
VisitorPatternDemo , unsere Demo-Klasse, verwendet die Klassen Computer und ComputerPartVisitor , um die Verwendung des Besuchermusters zu demonstrieren.
Schritt 1
Definieren Sie eine Schnittstelle zur Darstellung des Elements.
ComputerPart.java
public interface ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
}
Schritt 2
Erstellen Sie konkrete Klassen, die die obige Klasse erweitern.
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);
}
}
Schritt 3
Definieren Sie eine Schnittstelle zur Darstellung des Besuchers.
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);
}
Schritt 4
Erstellen Sie einen konkreten Besucher, der die oben genannte Klasse implementiert.
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.");
}
}
Schritt 5
Verwenden Sie den ComputerPartDisplayVisitor , um Teile des Computers anzuzeigen .
VisitorPatternDemo.java
public class VisitorPatternDemo {
public static void main(String[] args) {
ComputerPart computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());
}
}
Schritt 6
Überprüfen Sie die Ausgabe.
Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.