퍼사드 패턴이란?

- 서브 시스템에 있는 여러개의 인터페이스를 통합하는 한 개의 인터페이스를 제공하는 패턴

- 퍼사드는 서브 시스템을 쉽게 사용할 수 있도록 해주는 고급 수준의 인터페이스를 정의한다.

 

 우리가 밴드를 구성해서 공연을 하려고 한다. 그러기 위해서는 마이크의 전원을 켜고, 볼륨을 조절하고, 기타의 톤을 맞추고, 피아노 전원을 켜고... 공연을 시작하기 위해서 할 작업이 너무 많다. 그저 "공연 준비"라는 버튼 하나로 모든 기구의 세팅이 완료되었으면 좋겠다. 퍼사드 패턴을 적용해보자.

 

문제점

마이크 볼륨 조절, 전원, 기타의 톤 세팅 등 공연을 시작할 때 마다 수행해야 할 서브 시스템이 너무 많고 사용하기가 복잡하다.

 Mike

public class Mike {
    public void on(){
        System.out.println("마이크의 전원을 켭니다.");
    }
    public void off(){
        System.out.println("마이크의 전원을 끕니다.");
    }
}

Guitar

public class Guitar {
    public void on(){
        System.out.println("일렉기타의 전원을 켭니다.");
    }
    public void off(){
        System.out.println("일렉기타의 전원을 끕니다.");
    }

    public void setTone(){
        System.out.println("일렉기타의 톤을 맞춥니다.");
    }



}

Drum

public class Drum {
    public void on(){
        System.out.println("드럼의 전원을 켭니다.");
    }
    public void off(){
        System.out.println("드럼의 전원을 끕니다.");
    }
}

 

해결책

BandFacade라는 하나의 단순한 인터페이스를 제공하는 객체를 중간에 넣어서 startBand 메소드를 만들어 공연 시작 시 그에 맞는 메소드들을 실행해주게끔 한다.

public class BandFacade {
    Amplifier amp;
    Drum drum;
    Guitar guitar;
    Mike mike;

    public BandFacade(Amplifier amp, Drum drum, Guitar guitar, Mike mike) {
        this.amp = amp;
        this.drum = drum;
        this.guitar = guitar;
        this.mike = mike;
    }

    public void startBand(){
        amp.on();
        drum.on();
        guitar.on();
        mike.on();
        guitar.setTone();
    }

    public void endBand(){
        amp.off();
        drum.off();
        guitar.off();
        mike.off();

    }

}

 

클라이언트 입장에서는 startBand 메소드만 호출함으로서 복잡했던 공연 준비를 할 수 있게 되는 것이다.

+ Recent posts