본문 바로가기
Development, Architecture/Design Pattern

[디자인 패턴] Facade Pattern 퍼사드 패턴

by ggyongi 2021. 12. 1.
반응형

Facade Pattern

Definition

어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다.
퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다.

Structure

image

Source Code

영화를 보는 데에 필요한 음료, 리모컨, 영화에 대한 각각의 클래스를 만들고 기능을 설정해줍니다.

package facade_pattern;

public class Beverage {

    private String beverageName;

    public Beverage(String beverageName) {
        this.beverageName = beverageName;
    }

    public void prepare() {
        System.out.println("음료 "+beverageName+" 준비 완료.");
    }
}
package facade_pattern;

public class RemoteControl {
    public void turnOn(){
        System.out.println("TV를 켭니다.");
    }

}
package facade_pattern;

public class Movie {
    String movieName;

    public Movie(String movieName) {
        this.movieName = movieName;
    }

    public void findMovie() {
        System.out.println("영화 " + movieName + " 검색.");

    }

    public void payMovie() {
        System.out.println("영화 " + movieName + " 결제 완료.");

    }

    public void playMovie() {
        System.out.println("영화 " + movieName + " 재생.");

    }



}

이제 가장 핵심이 되는 Facade 클래스를 만들어 줍니다.
이곳에서 복잡했던 일련의 과정들을 묶어줍니다.

package facade_pattern;

public class MovieFacade {

    String movieName;
    String bevarageName;

    public MovieFacade(String movieName, String bevarageName) {
        this.movieName = movieName;
        this.bevarageName = bevarageName;
    }

    public void watchMovie() {

        RemoteControl remoteControl = new RemoteControl();
        Movie movie = new Movie(movieName);
        Beverage beverage = new Beverage(bevarageName);

        beverage.prepare();
        remoteControl.turnOn();
        movie.findMovie();
        movie.payMovie();
        movie.playMovie();
    }
}

다음과 같이 테스트 할 수 있습니다.
클라이언트 입장에서는 복잡한 일련의 과정을 일일이 거칠 필요 없이 손 쉽게 영화를 볼 수 있습니다.

package facade_pattern;

public class PatternTest {

    public static void main(String[] args) {
        MovieFacade movieFacade = new MovieFacade("spiderman", "powerade");
        movieFacade.watchMovie();
    }

}
package facade_pattern;

public class PatternTest {

    public static void main(String[] args) {
        MovieFacade movieFacade = new MovieFacade("spiderman", "powerade");
        movieFacade.watchMovie();
    }

}
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글