Home |
---|
Visiteur (d'objet).
Définir une nouvelle opération sur des objets sans changer leur code.
Alors que le polyphormisme permet de faire varier le comportement d'objets d'une même hiérarchie, le DP visiteur permet d'appliquer la même variation à des comportements externes, appliqués à des objets. De plus, il ne nécessite pas que les objets appartiennent à une même hiérarchie.
L'idée du visiteur est d'implémenter dans un objet annexe (le visiteur), qui invoquera de l'extérieur (viendra visiter) les opérations à exécuter pour ce comportement. L'objet visité n'aura eu aucune dépendance avec le visiteur concret.
Le DP visiteur définit :
Une extension du visiteur est le double-dipatching pour limiter le couplage d'appels entre deux objets.
interface MyVisitor {
void visit (Car visitedCar);
void visit (Computer visitedComputer);
}
interface MyVisitable {
void accept (MyVisitor visitor);
}
class StopVisitor implements MyVisitor {
/**
* The stop operation performed on a Car
*/
public void visit (Car visitedCar) {
visitedCar.freine(on);
visitedCar.debraye(true);
visitedCar.vitesse(0);
visitedCar.debraye(false);
visitedCar.setContact(false);
}
/**
* The stop operation performed on a Computer
*/
public void visit (Computer visitedComputer) {
visitedComputer.cliqueDemarrer();
visitedComputer.selectionne("Arrêter l'ordinateur");
}
}
class Car implements MyVisitable {
public void freine(boolean on) {
// Code ici...
}
public void debraye(boolean on) {
// Code ici...
}
public void vitesse(int level) {
// Code ici...
}
public void setContact(boolean on) {
// Code ici...
}
public void accept (MyVisitor visitor) {
visitor.visit (this); // Ask the visitor to perform its operation on myself
}
}
class Computer implements MyVisitable {
public void cliqueDemarrer() {
// Code ici...
}
public void selectionne(String menuChoice) {
// Code ici...
}
public void accept (MyVisitor visitor) {
visitor.visit (this); // Ask the visitor to perform its operation on myself
}
}
class Main {
public static void main (String args[]) {
MyVisitor stopVisitor = new MyStopVisitor(); // Une implementation de visiteur qui stoppe les objects
MyVisitable car = new Car();
car.accept (stopVisitor);
MyVisitable computer = new Computer();
computer.accept (stopVisitor);
}
}
Home |
---|