Facade 패턴

Java Design Pattern 2013. 2. 19. 15:34

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

단순화된 인터페이스를 통해서 서브시스템을 쉽게 사용할 있도록 하기 위한 용도로 쓰인다.

 

 

 

 

다음 코드는 다양한 홈시어터 콤포넌트들의 조작을 하나의  단순화된 인터페이스를 통해서 콘트롤을 하는 Façade 코드이다.

 

 

package headfirst.facade.hometheater;

 

public class HomeTheaterFacade {

       // 구성부분 : 우리가 사용하고자하는 서브시스템의 모든 구성요소들이 인스턴스 변수형태로 저장된다.

       Amplifier amp;

       Tuner tuner;

       DvdPlayer dvd;

       CdPlayer cd;

       Projector projector;

       TheaterLights lights;

       Screen screen;

       PopcornPopper popper;

 

       // Facade의 생성자에는 서브시스템의 각 구성요소의 레퍼런스가 전달된다.

       // Facade에서는 각 레퍼런스를 인스턴스 변수에 저장한다.

       public HomeTheaterFacade(Amplifier amp,

                            Tuner tuner,

                            DvdPlayer dvd,

                            CdPlayer cd,

                            Projector projector,

                            Screen screen,

                            TheaterLights lights,

                            PopcornPopper popper) {

 

              this.amp = amp;

              this.tuner = tuner;

              this.dvd = dvd;

              this.cd = cd;

              this.projector = projector;

              this.screen = screen;

              this.lights = lights;

              this.popper = popper;

       }

 

       public void watchMovie(String movie) {

              System.out.println("Get ready to watch a movie...");

              popper.on();

              popper.pop();

              lights.dim(10);

              screen.down();

              projector.on();

              projector.wideScreenMode();

              amp.on();

              amp.setDvd(dvd);

              amp.setSurroundSound();

              amp.setVolume(5);

              dvd.on();

              dvd.play(movie);

       }

 

 

       public void endMovie() {

              System.out.println("Shutting movie theater down...");

              popper.off();

              lights.on();

              screen.up();

              projector.off();

              amp.off();

              dvd.stop();

              dvd.eject();

              dvd.off();

       }

 

       public void listenToCd(String cdTitle) {

              System.out.println("Get ready for an audiopile experence...");

              lights.on();

              amp.on();

              amp.setVolume(5);

              amp.setCd(cd);

              amp.setStereoSound();

              cd.on();

              cd.play(cdTitle);

       }

 

       public void endCd() {

              System.out.println("Shutting down CD...");

              amp.off();

              amp.setCd(cd);

              cd.eject();

              cd.off();

       }

 

       public void listenToRadio(double frequency) {

              System.out.println("Tuning in the airwaves...");

              tuner.on();

              tuner.setFrequency(frequency);

              amp.on();

              amp.setVolume(5);

              amp.setTuner(tuner);

       }

 

       public void endRadio() {

              System.out.println("Shutting down the tuner...");

              tuner.off();

              amp.off();

       }

}

 

 

 

 

'Java Design Pattern' 카테고리의 다른 글

Observer 패턴  (0) 2013.02.20
Strategy 패턴 - 알고리즘을 사용하는 클라이언트와 독립적으로 구현  (0) 2013.02.20
Adapter 패턴  (0) 2013.02.19
Command 패턴  (0) 2013.02.19
Singleton 패턴  (0) 2013.02.19
Posted by Steven J.S Min
,