뭔가 여러가지 기능을 하는 인스턴트들이 있는데 목표로 하는
작업을 위해서 이들 인스턴트의 몇개의 작업이 조합되어야
할때 이를 편하게 묶는 작업정도라고 보면 되겠다.
3. 소스
1) 만들어져 있는 서브 인스턴트들
실제 메서드가 더 많겠지만 watchMovie 메서드를
실행시킬때 에러만 안나게끔 작성함.
package homeMeterial; public class Amplifier { public void on() { System.out.println("앰프를 켠다."); } public void setDvd(DvdPlayer dvd) { System.out.println("입력단자를 dvd로 연결한다."); dvd.getInputClient(); } public void setSurroundSound() { System.out.println("앰프 모드를 서라운드로 설정한다."); } public void setVolumn(int i) { System.out.println("앰프 음악 볼륨을 조절한다. 볼륨값은 max10중 "+i); } }
package homeMeterial; public class CdPlayer { }
package homeMeterial; public class DvdPlayer { public void getInputClient() { // TODO Auto-generated method stub System.out.println("DVD 음향 입력단자를 연결완료"); } public void on() { System.out.println("DVD를 켠다."); } public void play(String movie) { System.out.println("DVD로 영화를 플레이한다 영화제목은 :"+movie); } }
package homeMeterial; public class Projector { public void on() { System.out.println("프로젝트 on"); } public void wideScreenMove() { System.out.println("프로젝트 모드를 와이드 모드로 변환"); } }
package homeMeterial; public class PrpcornPopper { public void on() { System.out.println("팝콘 기계 on"); } public void pop() { System.out.println("팝콘이 튀겨지는걸 감상한다."); } }
package homeMeterial; public class Screen { public void down() { System.out.println("스크린을 내린다."); } }
package homeMeterial; public class TheaterLights { public void dim(int i) { System.out.println("전등 밝기 조절 밝니는 max100중에 "+i); } }
package homeMeterial; public class Tuner { }
2) 목표로 하는 작업 인터페이스 작성
묶어서 관리하고 있다. 이를 퍼사드 패턴으로 보면 됨
package runTheater; import homeMeterial.Amplifier; import homeMeterial.CdPlayer; import homeMeterial.DvdPlayer; import homeMeterial.Projector; import homeMeterial.PrpcornPopper; import homeMeterial.Screen; import homeMeterial.TheaterLights; import homeMeterial.Tuner; public class HomeTheaterFacade { Amplifier amp; Tuner tuner; DvdPlayer dvd; CdPlayer cd; Projector projector; TheaterLights lights; Screen screen; PrpcornPopper popper; public HomeTheaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, Projector projector, TheaterLights lights, Screen screen, PrpcornPopper 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("집에서 영화를 보려면 이렇게 준비하고 봐야지"); popper.on(); popper.pop(); lights.dim(10); screen.down(); projector.on(); projector.wideScreenMove(); amp.on(); amp.setDvd(dvd); amp.setSurroundSound(); amp.setVolumn(5); dvd.on(); dvd.play(movie); System.out.println("준비가 끝났으니 영화를 봅시다."); } }
3) 테스트 코드
여기서는 팝콘 기계를 켜고 할 필요없이
watchMovie(영화제목) 메서드를 통해서
하단의 여러 메서드를 한번에 실행시킬 수 있음.
package testFacade; import runTheater.HomeTheaterFacade; import homeMeterial.Amplifier; import homeMeterial.CdPlayer; import homeMeterial.DvdPlayer; import homeMeterial.Projector; import homeMeterial.PrpcornPopper; import homeMeterial.Screen; import homeMeterial.TheaterLights; import homeMeterial.Tuner; public class HomeTheaterTestDrive { public static void main(String[] args) { Amplifier amp = new Amplifier(); Tuner tuner= new Tuner(); DvdPlayer dvd=new DvdPlayer(); CdPlayer cd=new CdPlayer(); Projector projector=new Projector(); TheaterLights lights=new TheaterLights(); Screen screen=new Screen(); PrpcornPopper popper=new PrpcornPopper(); HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp, tuner, dvd, cd, projector, lights , screen, popper); homeTheater.watchMovie("Prison Breaker"); } }
3. 다이어그램
댓글 없음:
댓글 쓰기