09 퍼사드 패턴 (Facade Pattern)
퍼사드 패턴 (Facade Pattern)
동기
어떤 사람이 영화를 보고자 합니다. 영화를 보기 위해서는 다음과 같은 과정을 거치게 됩니다. 음료를 준비한다 -> TV를 켠다 -> 영화를 검색한다 -> 영화를 결제한다 -> 영화를 재생한다.
public void view()
{
Beverage beverage = new Beverage("콜라");
Remote_Control remote= new Remote_Control();
Movie movie = new Movie("어벤져스");
beverage.Prepare(); //음료 준비
remote.Turn_On(); //tv를 켜다
movie.Search_Movie(); //영화를 찾다
movie.Charge_Movie(); // 영화를 결제하다
movie.play_Movie(); //영화를 재생하다
}
사용자 입장에서는 영화를 보기위해서는 저런 복잡한 코드를 사용하여 영화를 봐야만 합니다. 여기서 퍼사드 객체가 등장하게 되는데 퍼사드는 이런 사용자와 영화를 보기위해 사용하는 서브 클래스들 사이의 간단한 통합 인터페이스를 제공해주는 역할을 하게 됩니다.
퍼사드 패턴의 구조
Client 입장에서는 Facde 객체에서 제공하는 doSomething() 메서드를 호출함으로써 복잡한 서브 클래스의 사용을 도와주고 있습니다.
예제
위에 동기 부분에서 사용한 예제를 Facade 객체를 추가한 형태와 더불어 전체 소스를 살펴 보겠습니다.
Remote_Control.java
public class Remote_Control {
public void Turn_On()
{
System.out.println("TV를 켜다");
}
public void Turn_Off()
{
System.out.println("TV를 끄다");
}
}
리모컨을 조작하는 클래스입니다. 복잡한 서브 클래스들중 하나입니다.
Movie.java
public class Movie {
private String name="";
public Movie(String name)
{
this.name = name;
}
public void Search_Movie()
{
System.out.println(name+" 영화를 찾다");
}
public void Charge_Movie()
{
System.out.println("영화를 결제하다");
}
public void play_Movie()
{
System.out.println("영화 재생");
}
}
영화 재생과 관련된 클래스입니다. 마찬가지로 복잡한 서브 클래스들중 하나입니다.
Beveragejava
public class Beverage {
private String name="";
public Beverage(String name)
{
this.name = name;
}
public void Prepare()
{
System.out.println(name+" 음료 준비 완료 ");
}
}
음료를 제공하는 클래스입니다. 복잡한 서브 클래스들중 하나입니다.
Facade.java
public class Facade {
private String beverage_Name ="";
private String Movie_Name="";
public Facade(String beverage,String Movie_Name)
{
this.beverage_Name=beverage_Name;
this.Movie_Name=Movie_Name;
}
public void view_Movie()
{
Beverage beverage = new Beverage(beverage_Name);
Remote_Control remote= new Remote_Control();
Movie movie = new Movie(Movie_Name);
beverage.Prepare();
remote.Turn_On();
movie.Search_Movie();
movie.Charge_Movie();
movie.play_Movie();
}
}
다음은 가장 중요한 Facade 클래스입니다. 복잡한 서브 클래스들에 대한 인스턴스를 가지며 복잡한 호출 방식에 대하여 view_Movie() 메서드내에서 구현을 하도록 하였습니다.
Viewer.java
public class Facade {
public void view()
{
Facade facade = new Facade("콜라","어벤져스");
facade.view_Movie();
}
사용자 입장에서는 이제 서브 클래스에 대해서 알 필요가 없습니다. 단지 Facde 객체의 view_Movie() 메서드를 호출하면서 서브 클래스들의 복잡한 기능을 수행 할 수 있기 떄문입니다.
출처 : https://lktprogrammer.tistory.com/42?category=672216
'JAVA > Design Patterns' 카테고리의 다른 글
13 데코레이터 패턴 (Decorator Pattern) (0) | 2021.12.13 |
---|---|
12 방문자 패턴 (Visitor Pattern) (0) | 2021.12.13 |
11 컴포지트 패턴 (Composite Pattern) (0) | 2021.12.13 |
10 역할 사슬 패턴 (Chain Of Responsibility) (0) | 2021.12.13 |
08 반복자 패턴 (Iterator Pattern) (0) | 2021.12.13 |
07 브릿지 패턴 (Bridge Pattern) (0) | 2021.12.13 |
06 프록시 패턴 (Proxy Pattern) (0) | 2021.12.13 |
05 어댑터 패턴 (Adapter Pattern) (0) | 2021.12.10 |