Facade Pattern

April 1, 2026

Facade = "one simple interface to a complex system" - One door.

Example: HomeTheaterFacade (new DVDPlayer(), new Projector(), new SoundSystem())

// Subsystems
class DVDPlayer {
    void on() { System.out.println("DVD on"); }
    void play() { System.out.println("Playing movie"); }
}

class Projector {
    void on() { System.out.println("Projector on"); }
}

class SoundSystem {
    void on() { System.out.println("Sound system on"); }
}

// Facade
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() {
        dvd.on();
        projector.on();
        sound.on();
        dvd.play();
    }
}

How to use

HomeTheaterFacade homeTheater = new HomeTheaterFacade(
    new DVDPlayer(),
    new Projector(),
    new SoundSystem()
);

homeTheater.watchMovie(); // one call instead of many

  • Adapter: use a old class into another new class, when call new method then call old method of old class inside.
  • Factory Method:
  • Bridge pattern:
  • Composite pattern: File, Folder, List Interface
  • Decorator pattern: Dynamic add many behaviors into a object (Wrapper): SimpleCoffee, CoffeeDecorator, MilkDecorator, SugarDecorator