브리지 모드
Bridge는 추상화와 구현을 분리하여 두 가지가 독립적으로 변경될 수 있도록 하는 데 사용됩니다. 이러한 유형의 디자인 패턴은 추상화와 구현 사이에 브리징 구조를 제공하여 분리하는 구조적 패턴입니다.
이 패턴에는 브리지 역할을 하는 인터페이스가 포함되어 있어 엔터티 클래스의 기능을 인터페이스 구현 클래스와 독립적으로 만듭니다. 두 클래스 유형 모두 서로 영향을 주지 않고 구조적으로 변경될 수 있습니다.
다음 예제를 통해 Bridge Pattern의 사용법을 보여드립니다. 그중에서도 동일한 추상 클래스 메소드를 사용하지만 브리지 구현 클래스가 다르기 때문에 다양한 색상의 원을 그릴 수 있습니다.
Introduction
의도: 추상적인 부분과 구현 부분을 분리하여 독립적으로 변경할 수 있도록 합니다.
주요 해결 방법: 변경할 수 있는 부분이 많은 경우 상속을 사용하면 클래스 폭발 문제가 발생하고 확장이 불가능해집니다.
사용 시기: 구현 시스템에는 여러 각도 분류가 있을 수 있으며 각 각도가 변경될 수 있습니다.
해결 방법: 이 다중 각도 분류를 분리하여 독립적으로 변경하고 간의 결합을 줄입니다.
키 코드: 추상 클래스는 구현 클래스에 따라 다릅니다.
적용 예: 1. Zhu Bajie는 Tianpeng 원수에서 돼지로 환생했습니다. 환생의 메커니즘은 세계를 두 가지 수준, 즉 전자는 추상화와 동일하고 후자는 동일합니다. 실현. 기능 위임을 통해 생명체는 물리적 객체의 기능을 호출하여 생명체가 역동적인 선택을 할 수 있도록 합니다. 2. 벽에 있는 스위치의 경우 눈에 보이는 스위치가 추상적인 것이므로 구체적으로 어떻게 구현되는지 고민하지 않으셔도 됩니다.
장점: 1. 추상화와 구현의 분리. 2. 뛰어난 확장 능력. 3. 구현 세부 사항을 고객에게 투명하게 만듭니다.
단점: 브리지 모드를 도입하면 시스템을 이해하고 설계하기가 더 어려워집니다. 집합 관계는 추상화 계층에서 설정되므로 개발자는 추상화를 위한 설계와 프로그래밍을 해야 합니다.
사용 시나리오: 1. 시스템이 구성 요소의 추상 역할과 구체적인 역할 사이에 더 많은 유연성을 추가하고 두 수준 간에 정적 상속 링크 설정을 피해야 하는 경우 브리지 모드를 사용할 수 있습니다. 추상화 수준의 관계. 2. 브리지 모드는 상속을 사용하고 싶지 않은 시스템이나 다단계 상속으로 인해 시스템 클래스 수가 급격히 증가하는 시스템에 특히 적합합니다. 3. 클래스에는 독립적으로 변경되는 두 개의 차원이 있으며 두 차원 모두 확장되어야 합니다.
참고: 두 개의 독립적으로 변경되는 차원의 경우 브리지 모드를 사용하는 것이 완벽합니다.
Implementation
우리는 DrawAPI 인터페이스를 구현하는 브리지 및 엔터티 클래스 RedCircle, GreenCircle으로 구현된 DrawAPI 인터페이스를 가지고 있습니다. Shape은 DrawAPI의 개체를 사용하는 추상 클래스입니다. BridgePatternDemo, 우리의 데모 클래스는 Shape 클래스를 사용하여 다양한 색상의 원을 그립니다.
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단계
Shape 및 DrawAPI 클래스를 사용하여 다양한 색상의 원을 그립니다.
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