📝 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