에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 브리지 패턴
- 추상 계층과 구현 계층을 독립적으로 확장할 수 있도록 다리를 두는 디자인 패턴
- 서로 독립적으로 변경 가능한 두 계층을 분리함
- 구현 뿐 아니라 추상화도 변경해야 하는 경우 사용
장점
- 추상화와 구현을 각각 독립적으로 확장 가능
- 조합 폭팔 방지
- 기존 코드 변경 최소화
2. 예제: RemoteControl
RemoteControl (Bridge)
더보기
abstract class RemoteControl {
protected TV tv; // Bridge to TV
public RemoteControl(TV tv) {
this.tv = tv;
}
public abstract void turnOn();
public abstract void turnOff();
public abstract void setChannel(int channel);
}
예시) BasicRemoteControl
더보기
class BasicRemoteControl extends RemoteControl {
public BasicRemoteControl(TV tv) {
super(tv);
}
@Override
public void turnOn() {
tv.on();
}
@Override
public void turnOff() {
tv.off();
}
@Override
public void setChannel(int channel) {
tv.changeChannel(channel);
}
}
예시) SmartRemoteControl
더보기
class SmartRemoteControl extends RemoteControl {
public SmartRemoteControl(TV tv) {
super(tv);
}
@Override
public void turnOn() {
System.out.println("Smart Remote: Turning TV ON.");
tv.on();
}
@Override
public void turnOff() {
System.out.println("Smart Remote: Turning TV OFF.");
tv.off();
}
@Override
public void setChannel(int channel) {
System.out.println("Smart Remote: Setting channel via voice command.");
tv.changeChannel(channel);
}
}
TV (Implementation)
더보기
interface TV {
void on();
void off();
void changeChannel(int channel);
}
예제) SamsungTV
더보기
class SamsungTV implements TV {
@Override
public void on() {
System.out.println("Samsung TV is ON.");
}
@Override
public void off() {
System.out.println("Samsung TV is OFF.");
}
@Override
public void changeChannel(int channel) {
System.out.println("Samsung TV: Changing to channel " + channel);
}
}
예제) LGTV
더보기
class LGTV implements TV {
@Override
public void on() {
System.out.println("LG TV is ON.");
}
@Override
public void off() {
System.out.println("LG TV is OFF.");
}
@Override
public void changeChannel(int channel) {
System.out.println("LG TV: Changing to channel " + channel);
}
}
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 12-3. 책임 연쇄 패턴 (0) | 2024.12.19 |
---|---|
[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 11. 프록시 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 10. 상태 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 9-2. 컴포지트 패턴 (2) | 2024.12.18 |