HomeTheaterFacade.java
package com.designpatterns.structural.facade.classic;
import java.util.ArrayList;
import java.util.List;
/**
* The caller asks for one thing ("watch a movie") instead of knowing that a projector, an
* amplifier, and a DVD player each need to be powered on and configured in a specific order.
* The subsystem classes are unchanged and still usable directly - the facade just adds a
* simpler entry point on top.
*/
public class HomeTheaterFacade {
private final Amplifier amplifier;
private final DvdPlayer dvdPlayer;
private final Projector projector;
public HomeTheaterFacade(Amplifier amplifier, DvdPlayer dvdPlayer, Projector projector) {
this.amplifier = amplifier;
this.dvdPlayer = dvdPlayer;
this.projector = projector;
}
public List<String> watchMovie(String movie) {
List<String> log = new ArrayList<>();
log.add(projector.on());
log.add(projector.wideScreenMode());
log.add(amplifier.on());
log.add(amplifier.setVolume(5));
log.add(dvdPlayer.on());
log.add(dvdPlayer.play(movie));
return log;
}
}