퍼사드 패턴이란?
- 서브 시스템에 있는 여러개의 인터페이스를 통합하는 한 개의 인터페이스를 제공하는 패턴
- 퍼사드는 서브 시스템을 쉽게 사용할 수 있도록 해주는 고급 수준의 인터페이스를 정의한다.
우리가 밴드를 구성해서 공연을 하려고 한다. 그러기 위해서는 마이크의 전원을 켜고, 볼륨을 조절하고, 기타의 톤을 맞추고, 피아노 전원을 켜고... 공연을 시작하기 위해서 할 작업이 너무 많다. 그저 "공연 준비"라는 버튼 하나로 모든 기구의 세팅이 완료되었으면 좋겠다. 퍼사드 패턴을 적용해보자.
문제점
마이크 볼륨 조절, 전원, 기타의 톤 세팅 등 공연을 시작할 때 마다 수행해야 할 서브 시스템이 너무 많고 사용하기가 복잡하다.
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 메소드만 호출함으로서 복잡했던 공연 준비를 할 수 있게 되는 것이다.
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 커맨드 패턴 (Command Pattern) (0) | 2023.12.09 |
---|---|
[디자인 패턴] Adapter Pattern (0) | 2023.12.09 |
[디자인 패턴] 컴포지트 패턴 (Composite Pattern) (0) | 2023.12.09 |
[디자인 패턴 기초] 빌더 패턴 (Builder Pattern) (0) | 2023.10.17 |
[디자인 패턴 기초] 데코레이터 패턴 (Decorator Pattern) (1) | 2023.10.10 |