브리지 모드


Bridge는 추상화와 구현을 분리하여 두 가지가 독립적으로 변경될 수 있도록 하는 데 사용됩니다. 이러한 유형의 디자인 패턴은 추상화와 구현 사이에 브리징 구조를 제공하여 분리하는 구조적 패턴입니다.

이 패턴에는 브리지 역할을 하는 인터페이스가 포함되어 있어 엔터티 클래스의 기능을 인터페이스 구현 클래스와 독립적으로 만듭니다. 두 클래스 유형 모두 서로 영향을 주지 않고 구조적으로 변경될 수 있습니다.

다음 예제를 통해 Bridge Pattern의 사용법을 보여드립니다. 그중에서도 동일한 추상 클래스 메소드를 사용하지만 브리지 구현 클래스가 다르기 때문에 다양한 색상의 원을 그릴 수 있습니다.

Introduction

의도: 추상적인 부분과 구현 부분을 분리하여 독립적으로 변경할 수 있도록 합니다.

주요 해결 방법: 변경할 수 있는 부분이 많은 경우 상속을 사용하면 클래스 폭발 문제가 발생하고 확장이 불가능해집니다.

사용 시기: 구현 시스템에는 여러 각도 분류가 있을 수 있으며 각 각도가 변경될 수 있습니다.

해결 방법: 이 다중 각도 분류를 분리하여 독립적으로 변경하고 간의 결합을 줄입니다.

키 코드: 추상 클래스는 구현 클래스에 따라 다릅니다.

적용 예: 1. Zhu Bajie는 Tianpeng 원수에서 돼지로 환생했습니다. 환생의 메커니즘은 세계를 두 가지 수준, 즉 전자는 추상화와 동일하고 후자는 동일합니다. 실현. 기능 위임을 통해 생명체는 물리적 객체의 기능을 호출하여 생명체가 역동적인 선택을 할 수 있도록 합니다. 2. 벽에 있는 스위치의 경우 눈에 보이는 스위치가 추상적인 것이므로 구체적으로 어떻게 구현되는지 고민하지 않으셔도 됩니다.

장점: 1. 추상화와 구현의 분리. 2. 뛰어난 확장 능력. 3. 구현 세부 사항을 고객에게 투명하게 만듭니다.

단점: 브리지 모드를 도입하면 시스템을 이해하고 설계하기가 더 어려워집니다. 집합 관계는 추상화 계층에서 설정되므로 개발자는 추상화를 위한 설계와 프로그래밍을 해야 합니다.

사용 시나리오: 1. 시스템이 구성 요소의 추상 역할과 구체적인 역할 사이에 더 많은 유연성을 추가하고 두 수준 간에 정적 상속 링크 설정을 피해야 하는 경우 브리지 모드를 사용할 수 있습니다. 추상화 수준의 관계. 2. 브리지 모드는 상속을 사용하고 싶지 않은 시스템이나 다단계 상속으로 인해 시스템 클래스 수가 급격히 증가하는 시스템에 특히 적합합니다. 3. 클래스에는 독립적으로 변경되는 두 개의 차원이 있으며 두 차원 모두 확장되어야 합니다.

참고: 두 개의 독립적으로 변경되는 차원의 경우 브리지 모드를 사용하는 것이 완벽합니다.

Implementation

우리는 DrawAPI 인터페이스를 구현하는 브리지 및 엔터티 클래스 RedCircle, GreenCircle으로 구현된 DrawAPI 인터페이스를 가지고 있습니다. ShapeDrawAPI의 개체를 사용하는 추상 클래스입니다. BridgePatternDemo, 우리의 데모 클래스는 Shape 클래스를 사용하여 다양한 색상의 원을 그립니다.

bridge_pattern_uml_diagram.jpg

1단계

브릿지 구현 인터페이스를 만듭니다.

DrawAPI.java

public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}

2단계

DrawAPI 인터페이스를 구현하는 엔터티 브리지 구현 클래스를 만듭니다.

RedCircle.java

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 +"]");
   }
}

GreenCircle.java

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 +"]");
   }
}

3단계

DrawAPI 인터페이스를 사용하여 추상 클래스 Shape를 만듭니다.

Shape.java

public abstract class Shape {
   protected DrawAPI drawAPI;
   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();	
}

4단계

Shape 인터페이스를 구현하는 엔터티 클래스를 만듭니다.

Circle.java

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);
   }
}

5단계

ShapeDrawAPI 클래스를 사용하여 다양한 색상의 원을 그립니다.

BridgePatternDemo.java

public class BridgePatternDemo {
   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();
   }
}

6단계

출력을 확인합니다.

rreee