Java Design Pattern - Bridge Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Structural Patterns, 구조 패턴

  • 클래스와 객체를 더 큰 결과물로 합칠 수 있는 구조로 설계하는 패턴이다.
  • 서로 다른 인터페이스를 지닌 여러 개의 객체를 조합하여 단일 인터페이스를 제공하거나, 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.

Bridge Pattern

  • 추상화를 구현으로부터 분리하여 각각 독립적으로 변화할 수 있도록 하는 패턴이다.

Example

public interface DrawAPI {

  public void drawCircle(int radius, int x, int y);

}
  • 도형을 그리기위한 DrawAPI 인터페이스를 정의한다.
public abstract class Shape {

  protected DrawAPI drawAPI;

  protected Shape(DrawAPI drawAPI) {
    this.drawAPI = drawAPI;
  }

  public abstract void draw();

}
public class Circle extends Shape {

  private int x, y, radius;

  public Circle(int x, int y, int radius, DrawAPI drawAPI) {
    super(drawAPI);
    this.x = x;
    this.y = y;
    this.radius = radius;
  }

  public void draw() {
    drawAPI.drawCircle(radius, x, y);
  }

}
  • DrawAPI를 활용하는 Shape 추상 클래스를 정의하고, 원을 그리기 위해 Circle 객체를 구현한다.
public class GreenCircle implements DrawAPI {

  @Override
  public void drawCircle(int radius, int x, int y) {
    System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]");
  }

}
public class RedCircle implements DrawAPI {

  @Override
  public void drawCircle(int radius, int x, int y) {
    System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
  }

}
  • DrawAPI를 상속받아 색상을 부여한 GreenCircle, RedCircle를 구현한다.
public class BridgePatternMain {

  public static void main(String[] args) {
    Shape redCircle = new Circle(100, 100, 10, new RedCircle());
    Shape greenCircle = new Circle(100, 100, 10, new GreenCircle());

    redCircle.draw();
    greenCircle.draw();
  }

}
  • GreenCircle, RedCircle 구현체를 이용하여 원을 생성 할 때, 색상을 독립적으로 적용할 수 있다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기