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:Bridgepattern:Compositepattern: File, Folder, List InterfaceDecoratorpattern: Dynamic add many behaviors into a object (Wrapper): SimpleCoffee, CoffeeDecorator, MilkDecorator, SugarDecorator