퍼사드 패턴(Facade Pattern)은 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 줍니다. 또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있습니다.
public class HomeTheaterFacade {
Amplifier amp;
Tuner tuner;
StreamingPlayer player;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp,
Tuner tuner,
StreamingPlayer player,
TheaterLights lights,
Screen screen,
PopcornPopper popper) {
this.amp = amp;
this.tuner = tuner;
this.player = player;
this.lights = lights;
this.screen = screen;
this.popper = popper;
}
// watchMovie() 메소드는 꽤 복잡한 일을 하나의 메소드로 간단하게 처리
public void watchMovie(String movie) {
System.out.println("영화 볼 준비 중");
popper.on();
popper.pop();
lights.dim(10);
screen.down();
projector.on();
projector.wideScreenMode();
amp.on();
amp.setStreamingPlayer(player);
amp.setSurroundSound();
amp.setVolume(5);
player.on();
player.play(movie);
}
// endMovie() 메소드는 모든 구성 요소를 끄는 기능을 제공
public void endMovie() {
System.out.println("홈시어터를 끄는 중");
popper.off();
lights.on();
screen.up();
projector.off();
amp.off();
player.stop();
projector.off();
}
}
최소 지식 원칙(Principle of Least Knowledge)는 객체 사이의 상호작용은 될 수 있으면 가까운 '친구' 사이에서만 허용하는 것이 좋음을 의미합니다.
이 원칙을 잘 따르면 여러 클래스가 복잡하게 얽혀 있어서, 시스템의 한 부분을 변경했을 때 다른 부분까지 줄줄이 고쳐야 하는 상황을 미리 방지할 수 있습니다.
이 원칙은 친구를 만들지 않는 4개의 가이드라인을 제시합니다.
// 원칙을 따르지 않는 경우
public float getTemp() {
Thermometer thermometer = station.getThermometer();
return thermometer.getTemperature();
}
// 원칙을 따르는 경우
public float getTemp() {
return station.getTemperature(); // 최소 원칙을 적용해서 thermometer에게 요청을 전달하는 메소드를 Station 클래스에 추가
}
출처