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.