728x90
출처 : 책 - java 언어로 배우는 디자인 패턴 입문
9. Bridge - 기능 계층과 구현 계층 분리하기
1. 목적
- 기능 계층과 구현 계층을 분리
- 장점 : 기능 인터페이스와 구현 인터페이스 나누어져 독립적으로 변경이 가능하다.
> 의도 : 일부분을 다른 클래스로 분리하여 기능과 구현으로 분리하고
구현은 구현대로, 기능은 기능대로 갈아낄 수 있도록 유연성을 높인 것이다.
> Build 패턴의 좀더 상위 개념인거 같다.
2. 예제
(1) Display - 기능 클래스
public class Display {
private DisplayImpl impl;
public Display(DisplayImpl impl) {
this.impl = impl;
}
public void open() {
impl.rawOpen();
}
public void print() {
impl.rawPrint();
}
public void close() {
impl.rawClose();
}
public final void display() {
open();
print();
close();
}
}
(2) CountDisplay - 기능 클래스 상속 (구현 역할)
public class CountDisplay extends Display {
public CountDisplay(DisplayImpl impl) {
super(impl);
}
public void multiDisplay(int times) { // times회 반복해서 표시하기
open();
for (int i = 0; i < times; i++) {
print();
}
close();
}
}
(3) DisplayImpl - 구현 클래스 (클래스명에 속지말자. "Impl" 이 들어갔지만 상속받는 것이 없다)
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
(4) StringDisplayImpl - 구현 클래스 상속 (구현 역할)
public class StringDisplayImpl extends DisplayImpl {
private String string;
private int width;
public StringDisplayImpl(String string) {
this.string = string;
this.width = string.getBytes().length;
}
public void rawOpen() {
printLine();
}
public void rawPrint() {
System.out.println("|" + string + "|");
}
public void rawClose() {
printLine();
}
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}
(5) Main
public class Main {
public static void main(String[] args) {
Display d1 = new Display(new StringDisplayImpl("Hello, Korea."));
Display d2 = new CountDisplay(new StringDisplayImpl("Hello, World."));
CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello, Universe."));
d1.display();
d2.display();
d3.display();
d3.multiDisplay(5);
}
}
728x90
'개발 > 디자인 패턴' 카테고리의 다른 글
[Java 언어로 배우는 디자인 패턴 입문] 동일시하기 11. Composite (0) | 2021.01.10 |
---|---|
[Java 언어로 배우는 디자인 패턴 입문] 분리해서 생각하기 10. Strategy (0) | 2021.01.10 |
[Java 언어로 배우는 디자인 패턴 입문] 인스턴스 만들기 8. Abstract Factory (0) | 2021.01.09 |
[Java 언어로 배우는 디자인 패턴 입문] 인스턴스 만들기 7. Builder (0) | 2021.01.08 |
[Java 언어로 배우는 디자인 패턴 입문] 인스턴스 만들기 6. Prototype (0) | 2021.01.08 |
댓글