import java.util.Random; /** * DrunkCar = décorateur "pilote ivre". * * Idée : * - Quand l'utilisateur demande "Accelerer", le pilote peut se tromper * et faire "Rallentir" à la place (au hasard). * - Pareil quand on demande "Rallentir". * * => On modifie seulement les actions utilisateur (accelerate/decelerate), * sans modifier la classe Car. */ public class DrunkCar extends CarDecorator { private static final Random RANDOM = new Random(); public DrunkCar(Car car) { super(car); } // 50% : fait la bonne action, 50% : fait l'inverse @Override public String accelerate() { if (RANDOM.nextBoolean()) { return car.accelerate(); } else { return car.decelerate(); } } @Override public String decelerate() { if (RANDOM.nextBoolean()) { return car.decelerate(); } else { return car.accelerate(); } } }