브리지 패턴(Bridge pattern)이란 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다.
- Abstraction
- 기능 계층의 최상위 클래스.
- 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출합니다.
- RefindAbstraction
- 기능 계층에서 새로운 부분을 확장한 클래스
- Implementor
- Abstraction의 기능을 구현하기 위한 인터페이스
- ConcreteImplementor
- 실제 기능을 구현합니다.
기존에 참조하여 연습하는 사이트의 예시가 별로여서 검색후 적절한 예시를 가져왔씁니다.
위의 그림과 같이 인터페이스와 구현 모두에 인터페이스 계층 구조가 있다고 가정해보겠습니다.
Shape의 구현체인 Triangle, Pentagon에서 다시 Color를 라는 추상층이 존재하고 있습니다.
위와 같이 작성되어있다면 독립적으로 변형이 힘들고, 확장이 어렵습니다.
만약 노랑색을 추가할려고한다면 Triangle, Pentagon를 각각 상속받아서 YellowColor를 두번 만들어야합니다.
위의 그림과 같이 Shape와 Color로 추상층을 분리하여 각자 독립적으로 변형이 가능하도록 브릿지 패턴을 적용합니다.
이를 통해서 만약 노랑색을 추가할려고 한다면 Color 하위에 YellowColor 하나만 추가해주면 됩니다.
또한 직사각형을 추가한다면 Shape 하위에 만들어주면 됩니다.
이처럼 다른 추상층에 영향을 주지않으면서 각 추상층이 독립적으로 변형, 확장이 가능해집니다.
public interface Color {
public void applyColor();
}
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
public abstract class Shape {
protected Color color;
public Shape(Color c){
this.color = c;
}
abstract public void applyColor();
}
public class Pentagon extends Shape {
public Pentagon(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Pentagon filled with color ");
color.applyColor();
}
}
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Triangle filled with color ");
color.applyColor();
}
}
잘 이해가 가지 않으실 경우를 대비해서 아래를 참조해보시면 좋을거 같습니다.
'Design Pattern > 구조 패턴' 카테고리의 다른 글
Proxy pattern (0) | 2021.05.04 |
---|---|
Facade Pattern (0) | 2021.05.04 |
Decorator Pattern (0) | 2021.05.04 |
Composite Pattern (0) | 2021.05.04 |
Adapter pattern (0) | 2021.05.03 |