Outils pour utilisateurs

Outils du site


helloworld:design_pattern:visiteur:java

Ceci est une ancienne révision du document !


Source, Archive

VisitorDemo.java
// Interface contenant les méthodes pour traiter toutes les implémentations de l'interface CarElement.
interface CarElementVisitor {
  void visit(Wheel wheel);
  void visit(Engine engine);
  void visit(Body body);
  void visit(Car car);
}
 
// Interface qui contiendra les données qui seront traitées par la méthode visit.
interface CarElement {
  void accept(CarElementVisitor visitor);
}
 
// Une implémentation des données stockées
class Wheel implements CarElement {
  private String name;
 
  public Wheel(String name) {
    this.name = name;
  }
 
  public String getName() {
    return this.name;
  }
 
  public void accept(CarElementVisitor visitor) {
    visitor.visit(this);
  }
}
 
class Engine implements CarElement {
  public void accept(CarElementVisitor visitor) {
    visitor.visit(this);
  }
}
 
class Body implements CarElement {
  public void accept(CarElementVisitor visitor) {
    visitor.visit(this);
  }
}
 
class Car implements CarElement {
  CarElement[] elements;
 
  public Car() {
    this.elements = new CarElement[] { new Wheel("front left"),
      new Wheel("front right"), new Wheel("back left"),
      new Wheel("back right"), new Body(), new Engine() };
  }
 
  public void accept(CarElementVisitor visitor) {  
    for(CarElement elem : elements) {
      elem.accept(visitor);
    }
    visitor.visit(this);
  }
}
 
// Une implémentation du traitement des données
class CarElementPrintVisitor implements CarElementVisitor {
  public void visit(Wheel wheel) {    
    System.out.println("Visiting " + wheel.getName() + " wheel");
  }
 
  public void visit(Engine engine) {
    System.out.println("Visiting engine");
  }
 
  public void visit(Body body) {
    System.out.println("Visiting body");
  }
 
  public void visit(Car car) {    
    System.out.println("Visiting car");
  }
}
 
class CarElementDoVisitor implements CarElementVisitor {
  public void visit(Wheel wheel) {
    System.out.println("Kicking my " + wheel.getName() + " wheel");
  }
 
  public void visit(Engine engine) {
    System.out.println("Starting my engine");
  }
 
  public void visit(Body body) {
    System.out.println("Moving my body");
  }
 
  public void visit(Car car) {
    System.out.println("Starting my car");
  }
}
 
// Le programme principal
public class VisitorDemo {
  public static void main(String[] args) {
    CarElement car = new Car();
    car.accept(new CarElementPrintVisitor());
    car.accept(new CarElementDoVisitor());
  }
}
helloworld/design_pattern/visiteur/java.1480796673.txt.gz · Dernière modification : de root