본문 바로가기

OOP

헤드퍼스트 디자인패턴 - Facade 패턴

퍼사드 클래스를 구현함으로써 복잡한 서브클래스에 메소드를 건드리지 않고 필요한 기능만 간단하게 골라서 이용 할 수 있다.
 
 
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

헤드 퍼스트 디자인 패턴 - 예스24

유지관리가 편리한 객체지향 소프트웨어 만들기!“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분하다.이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈! 하나

www.yes24.com

 

'OOP' 카테고리의 다른 글

헤드퍼스트 디자인패턴 - 커맨드패턴  (0) 2024.05.04
파이썬 객체생성 초기화__init__ , SELF 매개변수  (0) 2024.02.15
인터페이스 설계도  (0) 2024.02.01
다형성  (0) 2024.02.01
PHP 객체의 속성에 객체 저장  (0) 2024.01.30