뭔가 여러가지 기능을 하는 인스턴트들이 있는데 목표로 하는
작업을 위해서 이들 인스턴트의 몇개의 작업이 조합되어야
할때 이를 편하게 묶는 작업정도라고 보면 되겠다.
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. 다이어그램
댓글 없음:
댓글 쓰기