Prenons l'exemple d'un zoo avec des animaux différents, et supposons que nous voulons créer une interface simplifiée pour les gardiens du zoo pour gérer les animaux. Nous pouvons utiliser le pattern de façade pour encapsuler les détails complexes des animaux et fournir une interface cohérente pour les gardiens.
Voici un exemple de classe de façade qui encapsule les détails de la gestion des animaux du zoo :
class ZooFacade {
private $lions;
private $tigers;
private $elephants;
public function __construct() {
$this->lions = new Lions();
$this->tigers = new Tigers();
$this->elephants = new Elephants();
}
public function feedAnimals() {
$this->lions->feed();
$this->tigers->feed();
$this->elephants->feed();
}
public function cleanEnclosures() {
$this->lions->cleanEnclosure();
$this->tigers->cleanEnclosure();
$this->elephants->cleanEnclosure();
}
public function playWithAnimals() {
$this->lions->play();
$this->tigers->play();
$this->elephants->play();
}
}
Dans cet exemple, la classe ZooFacade encapsule les détails de la gestion des animaux (les lions, les tigres et les éléphants) en fournissant une interface simplifiée pour les gardiens. Les fonctions feedAnimals(), cleanEnclosures() et playWithAnimals() sont des exemples d'opérations que les gardiens peuvent effectuer à travers la façade.
La classe ZooFacade est également responsable de créer et de maintenir des instances des classes Lions, Tigers et Elephants, qui représentent les animaux réels dans le zoo.
En utilisant cette façade, les gardiens peuvent interagir avec les animaux du zoo de manière cohérente et facile, sans avoir à se soucier des détails complexes de chaque animal individuellement. Ils peuvent simplement appeler les fonctions de la façade pour nourrir, nettoyer et jouer avec les animaux.
class Lions {
public function feed() {
echo "Les lions sont nourris...\n";
}
public function cleanEnclosure() {
echo "La cage des lions est nettoyée...\n";
}
public function play() {
echo "Les lions se sont amusés...\n";
}
}
class Tigers {
public function feed() {
echo "Les tigres sont nourris...\n";
}
public function cleanEnclosure() {
echo "La cage des tigresest nettoyée...\n";
}
public function play() {
echo "Les lions se sont amusés...\n";
}
}
class Elephants {
public function feed() {
echo "LEs éléphants sont nourris...\n";
}
public function cleanEnclosure() {
echo "La cage des éléphants est nettoyée...\n";
}
public function play() {
echo "Les éléphants se sont amusés...\n";
}
}
Chacune de ces classes représente un type d'animal dans le zoo, et chaque classe contient des fonctions pour nourrir, nettoyer et jouer avec l'animal correspondant. Ces fonctions sont appelées par la classe ZooFacade pour permettre aux gardiens de gérer les animaux du zoo de manière simple et cohérente.
// Création de la façade pour le zoo
$zoo = new ZooFacade();
// Les gardiens nourrissent les animaux
$zoo->feedAnimals();
// Les gardiens nettoient les enclos
$zoo->cleanEnclosures();
// Les gardiens jouent avec les animaux
$zoo->playWithAnimals();
Dans cet exemple, nous créons une instance de la classe ZooFacade pour encapsuler les détails de gestion des animaux. Ensuite, nous appelons les fonctions de la façade pour permettre aux gardiens de nourrir, nettoyer et jouer avec les animaux.
L'appel de feedAnimals() déclenche l'alimentation de tous les animaux, en appelant les fonctions feed() pour chaque type d'animal. De même, l'appel de cleanEnclosures() déclenche le nettoyage de tous les enclos, en appelant les fonctions cleanEnclosure() pour chaque type d'animal. Enfin, l'appel de playWithAnimals() déclenche le jeu avec tous les animaux, en appelant les fonctions play() pour chaque type d'animal.
Ainsi, en utilisant la classe ZooFacade, les gardiens peuvent gérer les animaux du zoo de manière simple et cohérente, sans avoir à se soucier des détails complexes de chaque animal individuellement.