728x90
Facade Pattern
복잡한 시스템을 구조화하여 쉽게 사용
문제점) : 여러 개의 구성요소(interface)로 구성된, 사용 절차가 복잡한 시스템
Key Idea : subsystem (a set of interfaces)에 대해 통합 인터페이스 제공
예제 코드
public class HomeTheaterFacade
{
Amplifier amp;
Tuner tuner;
DvdPlayer dvd;
CdPlayer cd;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, Projector projector, TheaterLights lights, Screen screen, PopcornPopper popper) {
this.amp = amp;
this.tuner = tuner;
this.dvd = dvd;
this.cd = cd;
this.projector = projector;
this.lights = lights;
this.screen = screen;
this.popper = popper;
}
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.setSurroundSound();
amp.setVolume(5);
dvd.on();
dvd.play(movie);
}
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();
}
}
public class Client
{
public static void main(String[] args) {
// instantiate components here
HomeTheaterFacade homeTheater =
new HomeTheaterFacade(amp, tuner, dvd, cd, projector, screen, lights, popper);
homeTheater.watchMovie(“Raiders of the Lost Ark”);
homeTheater.endMovie();
}
}
Client를 대신하여 subsystem의 통합 인터페이스를 통해 보다 간단한 인터페이스 제공.
- client가 간단해짐.
- Hides subsystem from client -> client는 subsystem 변경에 영향을 받지 않음.
- 하나의 인터페이스를 통해 client , subsystem 간 결합도 (커플링) 가 낮아짐.
- 클라이언트와 복잡한 서브 시스템 사이에 Facade가 존재함.
하나의 완성품으로 조립하는 느낌이다.
Facade 패턴에서 제공하는 단순화된 하나의 인터페이스만 사용하므로 클래스간 의존관계가 줄어들고 복잡성 또한 낮아지는 효과를 가져온다.
책 참고 : Head First Design Patterns
댓글