반응형
퍼사드 패턴 이란?
• Façade는 ‘건물의 정면’, ‘건물의 외관’의 뜻으로 건물 외벽에서 보면 안의 구조는 보이지 않음
-많은 서브 시스템(내부 구조)을 거대한 클래스(외벽)으로 감싸서 편리한 인터페이스 제공
• 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공
• 서브시스템을 더 쉽게 사용할 수 있도록 만드는 더 높은 수준의 인터페이스를 제공
퍼사드 패턴 구조
Façade | System 클래스를 사용하여 Client 클래스에서 사용할 인터페이스를 구현 |
System | 특정 목적을 위한 여러 개의 클래스 존재 |
Client | Façade 클래스를 통해 System 클래스에 접근 가능 |
사용 예시
• 영화관에서 영화를 상영하고 있는 시스템이 있다고 가정하고, 영화를 상영하기 위한 필요한 절차는 아래와 같다.
(1) 조명을 영화관 모드로 변경
(2) 스크린을 내림
(3) 프로젝터를 킴
(4) 프로젝트를 영화관 모드로 변경
(5) DVD Player를 킴 (6) DVD Player에서 영화를 시작
• 위의 모든 과정을 수행하기 위해서는 조명, 프로젝터, 스크린, DVD Player 객체를 모두 알고 있어야 한다.
• 클라이언트가 모든 객체를 알고 있으면 결합도가 상당히 높고 복잡해진다.
• 퍼사드 패턴을 이용하여 클라이언트는 퍼사드 객체 하나만으로 영화를 상영할 수 있게 구현할 수 있다.
public class Light {
public void on() {
System.out.println("조명 킵니다.");
}
public void movieMode() {
System.out.println("조명 : 영화관 모드");
}
}
public class Screen {
public void down() {
System.out.println("스크린을 내립니다.");
}
public void up() {
System.out.println("스크린을 올립니다.");
}
}
public class Projector {
public void on() {
System.out.println("Projector를 킵니다.");
}
public void off() {
System.out.println("Projector를 끕니다.");
}
public void movieMode() {
System.out.println("Projector : 영화관모드");
}
}
public class DvdPlayer {
public void on() {
System.out.println("DvdPlayer를 킵니다.");
}
public void play(String movieName) {
System.out.println(movieName + "를 시작합니다.");
}
public void off() {
System.out.println("DvcPlayer를 끕니다.");
}
}
public class HomeTheaterFacade {
Light light;
Projector projector;
Screen screen;
DvdPlayer dvdPlayer;
public HomeTheaterFacade(Light light, Projector
projector, Screen screen, DvdPlayer dvdPlayer) {
this.light = light;
this.projector = projector;
this.screen = screen;
this.dvdPlayer = dvdPlayer;
}
public void watchMovie(String movieName) {
System.out.println("=====WATCH MOIVE=====");
light.movieMode();
screen.down();
projector.on();
projector.movieMode();
dvdPlayer.on();
dvdPlayer.play(movieName);
}
public void endMovie() {
System.out.println("=====END MOIVE=====");
light.on();
screen.up();
projector.off();
dvdPlayer.off();
}
}
public class Client {
public static void main(String[] args) {
HomeTheaterFacade homeTheaterFacade =
new HomeTheaterFacade(new Light(), new Projector(),
new Screen(), new DvdPlayer());
homeTheaterFacade.watchMovie("조커");
homeTheaterFacade.endMovie();
}
}
실행결과
=====WATCH MOIVE=====
조명 : 영화관모드
스크린을 내립니다.
Projector를 킵니다.
Projector : 영화관모드
DvdPlayer를 킵니다.
조커를 시작합니다.
=====END MOIVE=====
조명 킵니다.
스크린을 올립니다.
Projector를 끕니다.
DvcPlayer를 끕니다.
반응형
'객체 지향 프로그래밍 > 디자인 패턴' 카테고리의 다른 글
[구조 패턴] 데코레이터 패턴 (Decorator Pattern) 이란? (0) | 2022.05.26 |
---|---|
[생성 패턴] 팩토리 메서드 패턴 (Factory Method Pattern) 이란? (0) | 2022.05.26 |
[생성 패턴] 싱글톤 패턴 (Singleton Pattern) 이란? (0) | 2022.05.26 |
[생성 패턴] 빌더 패턴 (Builder Pattern) 이란? (0) | 2022.05.25 |
댓글