요약 : 서브시스템들의 공통적인 기능을 정의하는 단순화된 상위 수준의 인터페이스를 정의하는 구조패턴
- Facade : 사용자의 요청을 서브시스템 객체에 전달하는 단순하고 일관된 통합 인터페이스
- Subsystem Classes : Facade에 대한 정보를 가지지 않고, 서브시스템의 기능을 구현하는 클래스
진료를 받으러 병원에 도착할 때까지 여러 과정을 나눠 볼 수 있다. 예를 들어 씻고, 밥먹고 대중교통을 이용해서 이동하는데, 파사드 패턴을 이용해 각각의 동작들을 서브클래스로 구현하고, 서브클래스들의 공통 기능을 정의하는 상위 수준의 인터페이스를 정의할 수 있다.
[GoHospital.java]
public class GoHospital {
Wash wash = new Wash();
Eat eat = new Eat();
Move move = new Move();
public void goToHospital() {
wash.brushTeeth();
wash.hair();
eat.eatFood();
eat.drinkMilk();
move.walk();
move.subway();
}
}
[Wash.java]
public class Wash {
public void brushTeeth() {
System.out.println("치아 닦기");
}
public void hair() {
System.out.println("머리 감기");
}
}
[Eat.java]
public class Eat {
public void eatfood() {
System.out.println("밥 먹기");
}
public void drinkMilk() {
System.out.println("우유 마시기");
}
}
[Move.java]
public class Move {
public void walk() {
System.out.println("걷기");
}
public void subway() {
System.out.println("지하철 타기");
}
}
public class Main {
public static void main(String[] args) {
GoHospital goToHospital = new GoHospital();
goToHospital.goToHospital();
}
}
장점
- 서브시스템의 복잡성으로부터 코드를 분리할 수 있습니다.
- 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다.
- 클라이언트 입장에서 간단하고 쉽게 사용가능하다.
단점
- 파사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다.