여러 인터페이스의 사용을 단순하게 바꾸기 위해
인터페이스를 통합하여 사용하기 쉬운 인터페이스를 제공하고
복잡한 시스템을 훨씬 편리하게 사용할 수 있게 해주는 디자인 패턴
public interface 문 {
public void 열기();
public void 닫기();
}
public interface 조명 {
public void 켜기();
public void 끄기();
}
public interface 샤워기 {
public void 물뿌리기();
}
public interface 씻기 {
public void 샴푸();
public void 바디워시();
public void 양치질();
public void 세수();
public void 닦기();
}
public static void main(String[] args) {
문 우리집화장실문 = new 화장실문();
...중략
우리집화장실문.열기();
우리집화장실조명.켜기();
우리집화장실문.닫기();
깨끗이씻기.세수();
우리집샤워기.물뿌리기();
깨끗이씻기.양치질();
우리집샤워기.물뿌리기();
깨끗이씻기.샴푸();
우리집샤워기.물뿌리기();
깨끗이씻기.바디워시();
우리집샤워기.물뿌리기();
깨끗이씻기.닦기();
우리집화장실문.열기();
우리집화장실조명.끄기();
우리집화장실문.닫기();
}
이렇게 샤워하기 위해서 매번 모든 객체를 불러와서 메소드를 모두 사용하려면
여간 귀찮은 일이 아닐 수 없다.
이때 이 객체들을 한번에 통합시켜 새로운 하나의 클래스 혹은 인터페이스를 만들어서
간단하게 필요한 모든 메소드들을 실행할 수 있는 상태로 만드는 것이
퍼사드 패턴의 핵심이다.
예시를 위해서 멤버가 되는 객체의 생성들은 중략했다.
public class 샤워 {
문 화장실문;
조명 화장실조명;
샤워기 화장실샤워기;
씻기 깨끗이씻기;
public 샤워(문 화장실문, 조명 화장실조명, 샤워기 화장실샤워기, 씻기 깨끗이씻기) {
this.화장실문 = 화장실문;
this.화장실조명 = 화장실조명;
this.화장실샤워기 = 화장실샤워기;
this.깨끗이씻기 = 깨끗이씻기;
}
public 샤워하기() {
화장실문.열기();
화장실조명.켜기();
화장실문.닫기();
깨끗이씻기.세수();
화장실샤워기.물뿌리기();
깨꿋이씻기.양치질();
화장실샤워기.물뿌리기();
깨끗이씻기.샴푸();
화장실샤워기.물뿌리기();
깨끗이씻기.바디워시();
화장실샤워기.물뿌리기();
깨끗이씻기.닦기();
화장실문.열기();
화장실조명.끄기();
화장실문.닫기();
}
}
이렇게 모든 복잡한 인터페이스들을 통합으로 제공하는 퍼사드 클래스를 만들어 줌으로써
샤워를 매우 간단하게 할 수 있다.
public static void main(String[] args) {
문 우리집화장실문 = new 화장실문();
... 중략
샤워 쉽게샤워하기 = new 샤워(우리집화장실문, 우리집화장실조명, 우리집화장실샤워기, 우리집에서씻기);
쉽게샤워하기.샤워하기(); // 샤워완료!
}