Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- BOJ
- 코딩테스트
- DxTrace
- 1300번
- Dxerr.h
- 10830번
- 자바의 정석
- 코딩 테스트
- programmers
- Spring
- 백준
- Adapater Pattern
- 2166번
- 프로그래머스
- springboot
- java의 정석
- java
- 2156번
- 2206번
- 9장
- 클린코드
- Design Pattern
- SerialDate 리펙터링
- 냄새와 휴리스틱
- 17장
- 11758번
- 1043번
- 가장 긴 증가하는 부분 수열2
- 11286번
- Design Patterns
Archives
- Today
- Total
Don't give up!
[Design Pattern] 어댑터 패턴(Adapter Pattern)과 퍼사드 패턴(Facade Pattern) 본문
개발서적/Head First Design Patterns
[Design Pattern] 어댑터 패턴(Adapter Pattern)과 퍼사드 패턴(Facade Pattern)
Heang Lee 2021. 12. 16. 15:52이 글은 에릭 프리먼의 'Head First Design Patterns'를 읽고 TIL(Today I Learned)로써 정리한 내용을 기록하는 글입니다.
자세한 내용은 책을 통해 확인하실 수 있습니다.
알라딘: Head First Design Patterns (aladin.co.kr)
어댑터 패턴(Adapter Pattern)
어댑터 패턴은 한 클래스의 인터페이스를 클라이언트가 사용하는 다른 인터페이스로 변환하는 디자인 패턴입니다.
사용하고자 하는 클래스의 내부를 확인/수정할 수 없거나, 해당 클래스를 수정하였을 때 이를 사용하는 다른 코드로부터 문제가 발생할 것으로 우려되는 경우 어댑터 패턴을 사용함으로써 문제를 해결할 수 있습니다.
//Target 인터페이스.
public interface Duck {
public void quack();
public void fly();
}
//Duck를 구현한 MallardDuck 클래스.
public class MallardDuck implements Duck {
public void quack() {
System.out.println("Quack");
}
public void fly() {
System.out.println("I'm flying");
}
}
//Adaptee 인터페이스. Duck와 다른 메소드를 사용함.
public interface Turkey {
public void gobble();
public void fly();
}
public class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Gobble gobble");
}
public void fly() {
System.out.println("I'm flying a short distance");
}
}
//Adapater 클래스. turkey 객체를 Duck 객체로 변환.
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapater(Turkey turkey) {
this.turkey = turkey;
}
public void quack() {
turkey.gobble();
}
public void fly() {
for(int i=0; i<5; i++) {
turkey.fly();
}
}
}
퍼사드 패턴(Facade Pattern)
퍼사드 패턴은 복잡한 서브 시스템에 대해 통합된 인터페이스를 제공하는 디자인 패턴입니다.
외부 라이브러리와 같은 복잡한 시스템을 간략화하는 클래스를 제공함으로써 Client는 Facade 클래스에 대해서만 알 수 있도록 하여 서브 시스템에 의존하지 않도록 할 수 있습니다.
public class HomeTheaterFacade {
Amplifier amp;
Tuner tuner;
DvdPlayer dvd;
CdPlayer cd;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd,
CdPlayer cd, Projector projector, Screen screen,
TheaterLights lights, PopcornPopper popper) {
this.amp = amp;
this.tuner = tuner;
this.dvd = dvd;
this.cd = cd;
this.projector = projector;
this.screen = screen;
this.lights = lights;
this.popper = popper;
}
public void 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.setSurroundSound();
amp.setVolume(5);
dvd.on();
dvd.play(movie);
}
public void endMovie() {
System.out.println("Shutting movie theater down...");
popper.off();
lights.on();
screen.up();
projector.off();
amp.off();
dvd.stop();
dvd.eject();
dvd.off();
}
}
public class HomeTheaterTestDrive {
public static void main(String[] args) {
HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp, tuner, dvd, cd, projector, screen, lights, popper);
homeTheater.watchMovie("Radiers of the Lost Ark");
homeTheater.endMovie();
}
}
'개발서적 > Head First Design Patterns' 카테고리의 다른 글
[Design Pattern] 템플릿 메소드 패턴 (Template Method Pattern) (0) | 2021.12.21 |
---|---|
[Design Pattern] 커맨드 패턴(Command Pattern) (0) | 2021.11.30 |
[Design Pattern] 싱글톤 패턴(Singleton Pattern) (0) | 2021.11.02 |