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.