728x90
반응형
Bridge Pattern
- 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다.
- 기능과 구현에 대해 두 개의 별도 클래스로 구현한다.
장점
- 변경사항이 생일때 기능 부분만 변경해주면 나머지 구조는 건드릴 필요가없다.
- 여러개의 기능들을 다양하게 구현할수 있다.
- 쉽게 변경가능하다.
Bridge Pattern 구조
- Abstraction:
- 기능계층의 최상위 클래스
- 인터페이스로 되어 있다.
- RefinedAbstraction 에서 실제 메소드를 만든다. - RefinedAbstraction:
- Abstraction 을 상속받아 실제 구현 메소드를 만든다. - Implementor:
- Abstraction의 기능을 구현하기 위한 인터페이스 부분이다. - ConcreteImplementor:
- Implementor를 상속받아 기능을 구현한다.
Bridge Pattern 예제
- Shape(Abstraction):
- Shape 을 그리기 위한 최상위 계층
- 메소드를 정의만 해준다. - CircleShape(RefinedAbstraction):
- Shape을 상속받아 메소드를 구현한다.
- DrawAPI 를 이용해 메소드안에서 실제 그려주는 기능을 수행한다 - DrawingAPI
- Abstraction 에서 사용할 기능들을 구현할 인터페이스를 만든다. - DrawingAPI
- 실제 수행될 기능을 구현한다.
Bridge Pattern 구현
/** "Implementor" */
interface DrawingAPI
{
public void drawCircle(double x, double y, double radius);
}
/** "ConcreteImplementor" 1/2 */
class DrawingAPI1 implements DrawingAPI
{
public void drawCircle(double x, double y, double radius)
{
System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius);
}
}
/** "ConcreteImplementor" 2/2 */
class DrawingAPI2 implements DrawingAPI
{
public void drawCircle(double x, double y, double radius)
{
System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius);
}
}
/** "Abstraction" */
interface Shape
{
public void draw(); // low-level
public void resizeByPercentage(double pct); // high-level
}
/** "Refined Abstraction" */
class CircleShape implements Shape
{
private double x, y, radius;
private DrawingAPI drawingAPI;
public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI)
{
this.x = x; this.y = y; this.radius = radius;
this.drawingAPI = drawingAPI;
}
// low-level i.e. Implementation specific
public void draw()
{
drawingAPI.drawCircle(x, y, radius);
}
// high-level i.e. Abstraction specific
public void resizeByPercentage(double pct)
{
radius *= pct;
}
}
/** "Client" */
class BridgePattern {
public static void main(String[] args)
{
Shape[] shapes = new Shape[2];
shapes[0] = new CircleShape(1, 2, 3, new DrawingAPI1());
shapes[1] = new CircleShape(5, 7, 11, new DrawingAPI2());
for (Shape shape : shapes)
{
shape.resizeByPercentage(2.5);
shape.draw();
}
}
}
참고: https://ko.wikipedia.org/wiki/%EB%B8%8C%EB%A6%AC%EC%A7%80_%ED%8C%A8%ED%84%B4
728x90
반응형
'Design pattern > GoF(인강편)' 카테고리의 다른 글
[Design Pattern] Composite Pattern (0) | 2022.08.15 |
---|---|
[Design Pattern] Abstract Factory Pattern (0) | 2021.11.29 |
[Design Pattern] Builder Pattern (0) | 2021.11.24 |
[Design Pattern] Prototype Pattern (0) | 2021.11.24 |
[Design Pattern] Singleton Pattern (0) | 2021.11.24 |
댓글