Java/고급객체지향

고급객체지향 프로그래밍 - 퍼사드 패턴(Facade Pattern)

얄루몬 2021. 12. 12. 15:11

퍼사드 패턴(Facade Pattern)

1. 목적

  • 서브시스템에 있는 여러 개의 인터페이스를 통합하는 한개의 인터페이스를 제공한다. 
  • 퍼사드는 서브 시스템을 쉽게 사용할 수 있도록 해주는 고급 수준의 인터페이스를 정의한다.

 

홈시어터를 예시로 퍼사드 패턴을 설명

 

2. 패턴 요소

요소 설명
이름 퍼사드(Facade)
문제 서브시스템이 너무 많고 사용하기가 복잡한 문제
해결방안 단순한 인터페이스를 제공하는 객체를 중간에 넣는다
결과 최소 지식 원칙에 입각해서 의존성을 최소화 시킨다.

 

3. 사례

package smu_2;

public class HomeTheaterFacade {

	private Amplifier amp;
	private Tuner tuner;
	private DvdPlayer dvd;
	private CdPlayer cd;
	private Projector projector;
	private TheaterLights lights;
	private Screen screen;
	private PopcornPopper popper;
	
	
	public HomeTheaterFacade(Amplifier a, Tuner t, DvdPlayer d, CdPlayer c,
			Projector p, Screen s, TheaterLights l, PopcornPopper pp) {
		this.amp = a;
		this.tuner = t;
		this.dvd = d;
		this.cd = c;
		this.projector = p;
		this.lights = l;
		this.screen = s;
		this.popper = pp;
		
	}

}
package smu_2;

public class 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.setVolume(5);
	dvd.on();
	dvd.play(movie);
	
	
	public void endMoive() {
		System.out.println("Shutting movie theater down...");
		project.off();
		popper.off();
		lights.on();
		screen.up();
		projector.off();
		amp.off();
		dvd.stop();
		dvd.eject();
		dvd.off();
	}
	/*기타 메소드...*/
}
package smu_2;

public class HomeTheaterTestDrive {

	public static void main(String[] args) {
		HomeTheaterFacade homeTheater 
		= new HomeTheaterFacade(amp,tuner,dvd,cd,
				projector,screen,lights,popper);
		homeTheater.watchMovie("Raiders of the Lost Ark");
		homeTheater.endMovie();

	}

}

 

4. 퍼사드 패턴의 정의

퍼사드 패턴의 정의