-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexerice16Correction.php
138 lines (109 loc) · 3.13 KB
/
exerice16Correction.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/*
Enoncé de l'exercice :
Exercice : Refactoring avec le Design Pattern Factory
Contexte :
Vous avez hérité d'un code pour une application de gestion d'animaux dans un zoo. Actuellement, le code crée différents types d'animaux directement dans la classe principale. Votre tâche est de refactoriser ce code en utilisant le design pattern Factory pour améliorer la modularité et la flexibilité.
Code de base :
class Zoo {
public function createAnimal($type) {
if ($type === 'lion') {
return new Lion();
} elseif ($type === 'elephant') {
return new Elephant();
} elseif ($type === 'giraffe') {
return new Giraffe();
} else {
throw new Exception("Type d'animal non reconnu");
}
}
}
class Lion {
public function roar() {
echo "Roar!\n";
}
}
class Elephant {
public function trumpet() {
echo "Toot!\n";
}
}
class Giraffe {
public function munch() {
echo "Munch munch...\n";
}
}
$zoo = new Zoo();
$lion = $zoo->createAnimal('lion');
$lion->roar();
Instructions :
Créez une interface Animal qui définit une méthode makeSound().
Modifiez les classes Lion, Elephant et Giraffe pour qu'elles implémentent l'interface Animal. Chaque classe doit avoir une implémentation spécifique de la méthode makeSound().
Créez la classe AnimalFactory qui a une méthode createAnimal($type). Cette méthode doit retourner une instance du type d'animal spécifié.
Refactorisez la classe Zoo pour qu'elle utilise la AnimalFactory pour créer des animaux au lieu de le faire directement.
Écrivez un script de démonstration où vous créez différents types d'animaux en utilisant la classe Zoo refactorisée, puis faites en sorte que chaque animal émette un son.
*/
// Correction :
class Lion
{
public function roar()
{
echo "Roar!\n";
}
}
class Elephant
{
public function trumpet()
{
echo "Toot!\n";
}
}
class Giraffe
{
public function munch()
{
echo "Munch munch...\n";
}
}
class AnimalFactory
{
public function createAnimal($type)
{
if ($type === 'lion') {
return new Lion();
} elseif ($type === 'elephant') {
return new Elephant();
} elseif ($type === 'giraffe') {
return new Giraffe();
} else {
throw new Exception("Type d'animal non reconnu");
}
}
}
class Zoo
{
private $factory;
private $animaux = [];
public function __construct(AnimalFactory $factory)
{
$this->factory = $factory;
}
public function addAnimal($type)
{
$this->animaux[] = $this->factory->createAnimal($type);
}
public function getAnimaux()
{
return $this->animaux;
}
}
$animalFactory = new AnimalFactory();
$zoo = new Zoo($animalFactory);
$zoo->addAnimal('lion');
$zoo->addAnimal('elephant');
$zoo->addAnimal('giraffe');
$animaux = $zoo->getAnimaux();
echo "Vous avez " . count($animaux) . " d'animaux dans votre zoo, les voici :<br/><br/>";
foreach ($animaux as $animal) {
echo '<br/>- ' . $animal::class . '<br/><br/>';
}