Facade : 겉모양, 외관
퍼사드 클래스는 서브 시스템의 기능을 사용할 수 있는 간단한 인터페이스만 제공할뿐 서브 시스템 클래스를 캡슐화 하지 않는다.
클라이언트측에서 서브 시스템이 필요하다면 그냥 사용해도 된다는 점이 퍼사드 클래스의 대표적인 장점이다.
즉, 단순화된 인터페이스를 제공하면서도 클라이언트에서 필요하다면 서브시스템의 모든 기능을 사용할 수 있다. 2. 더 간단한 인터페이스를 만들 수 있다는 것 외에도 퍼사드의 장점은 ? 클라이언트 구현과 서브시스템을 분리할 수 있다.
public class HomeTheaterFacade {
private Amplifier amp;
private Tuner tuner;
private DvdPlayer dvd;
private CdPlayer cd;
private Projector projector;
private TheaterLights lights;
private Screen screen;
private PopcornPopper popper;
public HomeTheaterFacade(Amplifier a, Tuner t,
DvdPlayer d, CdPlayer c, Projector p,
Screen s, TheaterLights l, PopcornPopper pp) {
this.amp = a; this.tuner = t; this.dvd = d;
this.cd = c; this.projector = p; this.lights = l;
this.screen = s; this.popper = pp;
}
public void watchMovie(String movie) {
System.out.println("Get ready to watch a movie...");
popper.on();
popper.pop();
lights.dim(10);
screen.down();
projector.on();
projector.wideScreenMode();
amp.on();
amp.setDvd(dvd);
amp.setVolume(5);
dvd.on();
dvd.play(movie);
}
public void endMovie() {
System.out.println("Shutting movie theater down...");
projector.off();
amp.off();
dvd.stop();
dvd.eject();
dvd.off();
}
public void listenToRadio(double frequency) {
System.out.println("Tuning in the airwaves...");
tuner.on();
tuner.setFrequency(frequency);
amp.on();
amp.setVolume(5);
amp.setTuner(tuner);
}
public void endRadio() {
System.out.println("Shutting down the tuner...");
tuner.off();
amp.off();
}
}
public void endMovie() {
System.out.println("Shutting movie theater down..");
popper.off();
lights.on();
screen.up();
projector.off();
amp.off();
dvd.stop();
dvd.eject();
dvd.off();
}
… // 기타 메소드
}
watchMovie
, endMovie
등의 메소드를 통해 각 서브 시스템의 작업을 퍼사드 클래스에 위임한다.
public class HomeTheaterTestDrive {
public static void main(String[] args) {
// 컴포넌트 객체 생성 코드
HomeTheaterFacade homeTheater
= new HomeTheaterFacade(amp, tuner, dvd, cd,
projector, screen, lights, popper);
homeTheater.watchMovie("Raiders of the Lost Ark");
homeTheater.endMovie();
}
}
객체 사이의 상호작용은 가능한한 가까운 친구 사이에서만 허용하는 것이 좋다.
진짜 절친에게만 이야기해야 한다.
시스템을 디자인할 때 객체간의 상호작용하는 클래스의 개수와 방식엔 주의를 기울여야한다