diff --git a/src/DrunkCar.java b/src/DrunkCar.java index c1c0312..85577db 100644 --- a/src/DrunkCar.java +++ b/src/DrunkCar.java @@ -1,8 +1,15 @@ import java.util.Random; /** - * Décorateur Drunk : - * la voiture peut accélérer ou ralentir au hasard. + * 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 { @@ -11,6 +18,7 @@ public class DrunkCar extends CarDecorator { public DrunkCar(Car car) { super(car); } + // 50% : fait la bonne action, 50% : fait l'inverse @Override public String accelerate() { @@ -20,4 +28,13 @@ public class DrunkCar extends CarDecorator { return car.decelerate(); } } + + @Override + public String decelerate() { + if (RANDOM.nextBoolean()) { + return car.decelerate(); + } else { + return car.accelerate(); + } + } } diff --git a/src/HybridCar.java b/src/HybridCar.java new file mode 100644 index 0000000..6c2a506 --- /dev/null +++ b/src/HybridCar.java @@ -0,0 +1,20 @@ +/** + * Décorateur Hybrid : + * consomme moins de carburant. + */ +public class HybridCar extends CarDecorator { + + public HybridCar(Car car) { + super(car); + } + + @Override + public void run() { + // une fois sur deux, pas de consommation + if (Math.random() < 0.5) { + car.move(); + } else { + car.run(); + } + } +}