퍼사드 클래스를 구현함으로써 복잡한 서브클래스에 메소드를 건드리지 않고 필요한 기능만 간단하게 골라서 이용 할 수 있다.
1-1. 서브클래스 앰프 기능 On
package ch02.sec02;
public class Amplifier {
String description;
Tuner tuner;
StreamingPlayer player;
public void on() {
System.out.println("앰프가 켜졌습니다");
}
}
1-2. 서브클래스 팝콘 주문접수 기능
package ch02.sec02;
public class PopcornPopper {
public void order() {
System.out.println("팝콘 821번 주문접수 완료");
}
public void done() {
System.out.println("821번 팝콘 가져가세요");
}
public void pop() {
System.out.println("카라멜 팝콘이 튀겨지는 중입니다.");
}
}
1-3. 서브클래스 영화재생 기능
package ch02.sec02;
public class StreamingPlayer {
String description;
String movie;
public void play(String movie) {
this.movie = movie;
System.out.println("영화 " + movie + " 재생");
}
}
1-4. 서브클래스 조명기능 설정
package ch02.sec02;
public class TheaterLights {
public void dim(int level) {
System.out.println("조명밝기를 " + level + "% 설정합니다");
}
}
2. 퍼사드 클래스에서 서브클래스 기능들을 사용하고 있다.
package ch02.sec02;
public class HomeTheaterFacade {
// 인스턴스 변수
Amplifier amplifier;
StreamingPlayer player;
PopcornPopper popper;
TheaterLights lights;
// 홈시어터 생성자에 서브시스템의 구성요소 인스턴스변수를 넣어서 홈시어터 인스턴스 변수에 저장한다.
public HomeTheaterFacade(StreamingPlayer player, Amplifier amplifier,PopcornPopper popper,TheaterLights lights) {
this.player = player;
this.amplifier = amplifier;
this.popper = popper;
this.lights = lights;
}
// 필요한 기능만 골라서 구현할 수 있다.
public void watchMovie(String movie) {
System.out.println("10분 뒤 영화가 곧 시작됩니다");
popper.order();
popper.pop();
popper.done();
lights.dim(50);
amplifier.on();
player.play(movie);
}
}
3. 각 서브클래스 객체 생성후 퍼사드클래스 매개변수에 넣는다
package ch02.sec02;
public class HomeTheaterTestDrive {
// 테스트 화면
public static void main(String[] args) {
StreamingPlayer player = new StreamingPlayer();
Amplifier amplifier = new Amplifier();
PopcornPopper popper = new PopcornPopper();
TheaterLights lights = new TheaterLights();
HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(player, amplifier,popper,lights);
homeTheaterFacade.watchMovie("인셉션");
}
}
https://www.yes24.com/Product/Goods/108192370
'OOP' 카테고리의 다른 글
헤드퍼스트 디자인패턴 - 커맨드패턴 (0) | 2024.05.04 |
---|---|
파이썬 객체생성 초기화__init__ , SELF 매개변수 (0) | 2024.02.15 |
인터페이스 설계도 (0) | 2024.02.01 |
다형성 (0) | 2024.02.01 |
PHP 객체의 속성에 객체 저장 (0) | 2024.01.30 |