📝 Ce que vous apprendrez
- Qu'est-ce que le modèle de façade ?
- Pourquoi et quand l'utiliser ?
- Comment l'implémenter en Java
- Exemples concrets et cas d'utilisation
- Erreurs courantes et meilleures pratiques
🔍 Qu'est-ce que le modèle de façade ?
Le Modèle de façade fournit une interface unifiée et simplifiée à un ensemble d'interfaces dans un sous-système. Il masque les complexités du système et fournit un moyen plus facile d'interagir avec lui.
Comme un concierge d'hôtel, vous n'avez pas besoin de connaître tous les services ; le concierge s'en occupe pour vous.
🧩 Quand l'utiliser ?
Utilisez le modèle de façade lorsque :
- Un système est complexe ou a de multiples composantes interdépendantes.
- Vous souhaitez fournir une interface simple pour les tâches courantes
- Vous voulez découpler le code client du code du sous-système
🧱 Implémentation Java
🎥 Étape 1 : Créer des sous-systèmes
public class DVDPlayer {
public void on() {
System.out.println("DVD Player is on");
}
public void play(String movie) {
System.out.println("Playing: " + movie);
}
public void off() {
System.out.println("DVD Player is off");
}
}
public class Projector {
public void on() {
System.out.println("Projector is on");
}
public void off() {
System.out.println("Projector is off");
}
}
public class SoundSystem {
public void on() {
System.out.println("Sound system is on");
}
public void setVolume(int level) {
System.out.println("Setting volume to: " + level);
}
public void off() {
System.out.println("Sound system is off");
}
}
🧱 Étape 2 : Créer la façade
public class HomeTheaterFacade {
private DVDPlayer dvd;
private Projector projector;
private SoundSystem sound;
public HomeTheaterFacade(DVDPlayer dvd, Projector projector, SoundSystem sound) {
this.dvd = dvd;
this.projector = projector;
this.sound = sound;
}
public void watchMovie(String movie) {
System.out.println("Get ready to watch a movie...");
projector.on();
sound.on();
sound.setVolume(5);
dvd.on();
dvd.play(movie);
}
public void endMovie() {
System.out.println("Shutting down movie theater...");
dvd.off();
sound.off();
projector.off();
}
}
✅ Usage
DVDPlayer dvd = new DVDPlayer();
Projector projector = new Projector();
SoundSystem sound = new SoundSystem();
HomeTheaterFacade theater = new HomeTheaterFacade(dvd, projector, sound);
theater.watchMovie("Inception");
theater.endMovie();
🖥️ Analogie avec le monde réel
Pensez à une application intelligente pour la maison. Au lieu d'allumer séparément les lumières, la musique et le thermostat, il vous suffit d'appuyer sur "Movie Mode" - une facade se charge de toutes les étapes à votre place.
⚠️ Les pièges à éviter
- ❌ Utiliser la façade pour masquer une mauvaise conception - nettoyer les internes s'ils sont désordonnés
- Simplifier à l'extrême au point de supprimer des fonctionnalités nécessaires
- ❌ Rendre les clients trop dépendants de la façade (au lieu de les abstraire)
✅ Meilleures pratiques
- La façade doit être ciblée et simple
- La façade ne doit pas restreindre l'accès direct aux sous-systèmes lorsque cela est nécessaire
- L'utiliser pour organiser et découpler le code, pas pour cacher une mauvaise structure.
📘 Recap
- Le modèle de façade fournit une interface simple à un système complexe.
- Permet de réduire le couplage et de masquer les détails de la mise en œuvre
- Souvent utilisé dans les bibliothèques, les API et les systèmes en couches.
- Analogie avec le monde réel : concierge, tableau de bord, télécommande