[디자인패턴] 파사드 패턴(Pacade Pattern)

Damsul·2023년 1월 9일
0

디자인패턴

목록 보기
2/15
post-thumbnail
  1. 복잡한 서브시스템에 인터페이스를 단순하게 구성하고자 할때
  2. 시스템간에 결합도를 줄이고자 할때
  3. 서브시스템을 계층화 시키고 싶을때
    사용하는 구조 패턴

요약 : 서브시스템들의 공통적인 기능을 정의하는 단순화된 상위 수준의 인터페이스를 정의하는 구조패턴

출처 : 위키피디아

  • Facade : 사용자의 요청을 서브시스템 객체에 전달하는 단순하고 일관된 통합 인터페이스
  • Subsystem Classes : Facade에 대한 정보를 가지지 않고, 서브시스템의 기능을 구현하는 클래스

예제

진료를 받으러 병원에 도착할 때까지 여러 과정을 나눠 볼 수 있다. 예를 들어 씻고, 밥먹고 대중교통을 이용해서 이동하는데, 파사드 패턴을 이용해 각각의 동작들을 서브클래스로 구현하고, 서브클래스들의 공통 기능을 정의하는 상위 수준의 인터페이스를 정의할 수 있다.

  • 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();
    }
}
  • SubSystem

[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("지하철 타기");
    }
}
  • Client
    [Main.java]
public class Main {
    public static void main(String[] args) {
        GoHospital goToHospital = new GoHospital();
        goToHospital.goToHospital();
    }

}
  • 실행결과

장단점

  • 장점
    - 서브시스템의 복잡성으로부터 코드를 분리할 수 있습니다.
    - 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다.
    - 클라이언트 입장에서 간단하고 쉽게 사용가능하다.

  • 단점
    - 파사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다.

profile
내 맘대로 작성하는 개발일지/ 작고 소중한 개발창고

0개의 댓글