반응형
가정) 홈 씨어터(극장)으로 예제를 작성하겠습니다.
로직
1. 전등을 어둡게 조절한다.
2.스크린을 내린다.
3.프로젝터를 켠다.
4.프로젝트로 DVD신호가 입력되도록 한다.
5.앰프를 켠다.
6.볼륨을 중간으로 설정한다.
7.DVD를 키고 재생한다..... 등
light.on();
screen.down();
.
.
.
등등
.
.
그런데,, 아직 끝난게 아닙니다.
영화가 끝나면 어떤식으로 꺼야할까요?
시스템을 업그레이드하면 또 어떤식으로 작동되어야할까요?
.
.
이런경우에 퍼스드를 사용하면 됩니다.
퍼사드는 인터페이스를 단순화 시킬 뿐 아니라 클라이언트와 구성요소들로 이루어진
서브시스템을 분리시키는 역할도 합니다.
퍼사드와 어댑터는 모두 여러 개의 클래스를 감쌀 수 있습니다.
하지만,
퍼사드는 인터페이스를 단순화시키기 위한 용도로 쓰이는 반면,
어댑터는 인터페이스를 다른 인터페이스로 변환하기 위한 용도로 쓰입니다.
.
.
예제구현
public class HomeTheaterFacade {
Amplifier amp;
Tuner tuner;
StreamingPlayer player;
CdPlayer cd;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp,
Tuner tuner,
StreamingPlayer player,
Projector projector,
Screen screen,
TheaterLights lights,
PopcornPopper popper) {
this.amp = amp;
this.tuner = tuner;
this.player = player;
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.wideScreenMode();
amp.on();
amp.setStreamingPlayer(player);
amp.setSurroundSound();
amp.setVolume(5);
player.on();
player.play(movie);
}
public class Amplifier {
String description;
Tuner tuner;
StreamingPlayer player;
public Amplifier(String description) {
this.description = description;
}
public void on() {
System.out.println(description + " on");
}
public void off() {
System.out.println(description + " off");
}
public void setStereoSound() {
System.out.println(description + " stereo mode on");
}
public void setSurroundSound() {
System.out.println(description + " surround sound on (5 speakers, 1 subwoofer)");
}
public void setVolume(int level) {
System.out.println(description + " setting volume to " + level);
}
public void setTuner(Tuner tuner) {
System.out.println(description + " setting tuner to " + player);
this.tuner = tuner;
}
public void setStreamingPlayer(StreamingPlayer player) {
System.out.println(description + " setting Streaming player to " + player);
this.player = player;
}
public String toString() {
return description;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Amplifier amp = new Amplifier("Amplifier");
Tuner tuner = new Tuner("AM/FM Tuner", amp);
StreamingPlayer player = new StreamingPlayer("Streaming Player", amp);
CdPlayer cd = new CdPlayer("CD Player", amp);
Projector projector = new Projector("Projector", player);
TheaterLights lights = new TheaterLights("Theater Ceiling Lights");
Screen screen = new Screen("Theater Screen");
PopcornPopper popper = new PopcornPopper("Popcorn Popper");
HomeTheaterFacade homeTheater =
new HomeTheaterFacade(amp, tuner, player,
projector, screen, lights, popper);
homeTheater.watchMovie("Raiders of the Lost Ark");
homeTheater.endMovie();
}
}
.
.
.
퍼사드패턴 : 어떤 서브시스템의 일련의 인터페이스에 통합된 인터페이스를 제공합니다.
퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브세스템을 더 쉽게 사용 할 수 있습니다.
.
.
디자인원칙
- 최소 지식 원칙 : 정말 친한 친구하고만 얘기하라.
결합도를 낮추는 방법
다음 네 종류의 객체의 메소드만을 호출하면 됩니다.
1. 객체 자체
2. 메소드에 매개면수로 전달된 객체
3. 그 메소드에서 생성하거나 인트턴스를 만든 객체
4. 그 객체에 속하는 구성요소
//원칙을 따르지 않는경우
public float getTemp() {
Thermometer thermometer = station.getThermometer();
return thremometer.getTemperature();
}
//원칙을 따르는 경우
puvlic float getTemp() {
return station.getTemperature();
}
반응형
'개발공부 > 디자인 패턴' 카테고리의 다른 글
자바 및 코틀린 템플릿(templete) 패턴이란? (0) | 2022.02.21 |
---|---|
자바 및 코틀린 어댑터(adapter) 패턴이란? (0) | 2022.02.07 |
자바 및 코틀린 커맨드(command) 패턴이란? (0) | 2022.01.30 |
안드로이드 자바 MVVM패턴 이란? (0) | 2022.01.24 |
안드로이드 자바 MVP패턴 이란? (0) | 2022.01.23 |