mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.6 KiB
95 lines
2.6 KiB
1 year ago
|
## Decorator
|
||
|
|
||
|
### Instructions
|
||
|
|
||
|
Now let's implement the Decorator Design Pattern
|
||
|
|
||
|
```mermaid
|
||
|
classDiagram
|
||
|
class Raclette {
|
||
|
<<interface>>
|
||
|
+getCalories()* String
|
||
|
+getIngredients()* String
|
||
|
}
|
||
|
class BaseRaclette {
|
||
|
+getCalories() String
|
||
|
+getIngredients() String
|
||
|
}
|
||
|
class RacletteDecorator {
|
||
|
<<abstract>>
|
||
|
-Raclette raclette
|
||
|
+RacletteDecorator(Raclette raclette)
|
||
|
+getCalories() String
|
||
|
+getIngredients() String
|
||
|
}
|
||
|
class WithPickles {
|
||
|
-Raclette raclette
|
||
|
+RacletteDecorator(Raclette raclette)
|
||
|
+getCalories() String
|
||
|
+getIngredients() String
|
||
|
}
|
||
|
class WithColdMeats {
|
||
|
-Raclette decoratedRaclette
|
||
|
+RacletteDecorator(Raclette raclette)
|
||
|
+getCalories() String
|
||
|
+getIngredients() String
|
||
|
}
|
||
|
|
||
|
Raclette <|.. BaseRaclette
|
||
|
Raclette <|.. RacletteDecorator
|
||
|
RacletteDecorator <|-- WithPickles
|
||
|
RacletteDecorator <|-- WithColdMeats
|
||
|
|
||
|
|
||
|
```
|
||
|
|
||
|
Here is the matching class diagram. Create the matching classes in the matching files.
|
||
|
|
||
|
Here is the description :
|
||
|
* `BaseRaclette` :
|
||
|
* `getCalories` should return 1000
|
||
|
* `getIngredients` should return "Patate, fromage à raclette"
|
||
|
* `RacletteDecorator` :
|
||
|
* `getCalories` should return the `getCalories` of the `decoratedRaclette` attribute
|
||
|
* `getIngredients` should return the `getIngredients` of the `decoratedRaclette` attribute
|
||
|
* `WithPickles` :
|
||
|
* `getCalories` should return the addition of 50 and the `getCalories` of the `decoratedRaclette` attribute
|
||
|
* `getIngredients` should return the concatenation of `getIngredients` of the `decoratedRaclette` attribute and ", cornichons"
|
||
|
* `WithColdMeats` :
|
||
|
* `getCalories` should return the addition of 350 and the `getCalories` of the `decoratedRaclette` attribute
|
||
|
* `getIngredients` should return the concatenation of `getIngredients` of the `decoratedRaclette` attribute and ", charcuterie"
|
||
|
|
||
|
For each class, implement the `toString` method to return "`getIngredients()` pour `getCalories()` calories".
|
||
|
|
||
|
### Usage
|
||
|
|
||
|
Here is a possible ExerciseRunner.java to test your function :
|
||
|
|
||
|
```java
|
||
|
public class ExerciseRunner {
|
||
|
|
||
|
public static void main(String[] args) {
|
||
|
Raclette r = new BaseRaclette();
|
||
|
System.out.println(r);
|
||
|
r = new WithPickles(r);
|
||
|
System.out.println(r);
|
||
|
r = new WithColdMeats(r);
|
||
|
System.out.println(r);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
and its output :
|
||
|
```shell
|
||
|
$ javac *.java -d build
|
||
|
$ java -cp build ExerciseRunner
|
||
|
Patate, fromage à raclette pour 1000 calories
|
||
|
Patate, fromage à raclette, cornichons pour 1050 calories
|
||
|
Patate, fromage à raclette, cornichons, charcuterie pour 1400 calories
|
||
|
$
|
||
|
```
|
||
|
|
||
|
### Notions
|
||
|
[Class diagram](https://fr.wikipedia.org/wiki/Diagramme_de_classes)
|
||
|
|