Modèles de conception - Modèle de visiteur

Dans le modèle de visiteur, nous utilisons une classe de visiteur qui change l'algorithme d'exécution d'une classe d'élément. De cette manière, l'algorithme d'exécution de l'élément peut varier au fur et à mesure que le visiteur varie. Ce modèle appartient à la catégorie des modèles de comportement. Selon le modèle, l'objet élément doit accepter l'objet visiteur afin que l'objet visiteur gère l'opération sur l'objet élément.

la mise en oeuvre

Nous allons créer une interface ComputerPart définissant l'opearation d'acceptation. Keyboard , Mouse , Monitor et Computer sont des classes concrètes mettant en œuvre l' interface ComputerPart . Nous définirons une autre interface ComputerPartVisitor qui définira les opérations d'une classe de visiteur. L'ordinateur utilise un visiteur concret pour effectuer l'action correspondante.

VisitorPatternDemo , notre classe de démonstration, utilisera les classes Computer et ComputerPartVisitor pour démontrer l'utilisation du modèle de visiteur.

Étape 1

Définissez une interface pour représenter l'élément.

ComputerPart.java

public interface ComputerPart {
   public void accept(ComputerPartVisitor computerPartVisitor);
}

Étape 2

Créez des classes concrètes étendant la classe ci-dessus.

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);
   }
}

Étape 3

Définissez une interface pour représenter le visiteur.

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);
}

Étape 4

Créez un visiteur concret mettant en œuvre la classe ci-dessus.

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.");
   }
}

Étape 5

Utilisez ComputerPartDisplayVisitor pour afficher des parties de l' ordinateur .

VisitorPatternDemo.java

public class VisitorPatternDemo {
   public static void main(String[] args) {

      ComputerPart computer = new Computer();
      computer.accept(new ComputerPartDisplayVisitor());
   }
}

Étape 6

Vérifiez la sortie.

Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.