문제

나는이 브리지 패턴 예제에서 시간을 보냈다. 위키 백과, 그러나 나는 여전히이 브리지 패턴이 설명하려고하는 것을 이해하지 못한다.

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 Main {
   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();
       }
   }
}

서브 클래스 Circleshape 생성자는 4 개의 Args를 취합니다. Draw () 메소드에서 처음 3 개의 Args는 4 번째 Arg로 전달되어 DrawingApi의 하위 클래스가 될 수 있습니다. 그렇다면 브리지 패턴을 사용하여 유연성을 높일 수 있다는 것을 의미합니까? 그리고이 예가 우리에게 말할 수있는 더 많은 것이 있습니까?

감사!!!!

도움이 되었습니까?

해결책

이것이 유용한 이유가 더 구체적인 예는 더 명확 해집니다. DrawingApi1이 그래픽 드라이버를 캡슐화한다고 가정하고 DrawingApi2는 프린터 드라이버에 대해 동일한 작업을 수행한다고 가정합니다. 그런 다음 DrawingApi는 그래픽 시스템의 일반 API입니다. 이를 통해 모니터에 원형 촬영을 그릴 수 있으며 동일한 코드를 사용하여 종이 조각에 인쇄 할 수 있습니다. 다른 DraweApi 구현에만 전달되면됩니다. 그러나 DrawingApi를 Shape.Draw ()로 전달하면 생성자로 전달하는 대신 모니터와 프린터에 동일한 객체 그래프를 사용할 수 있기 때문에 더 유연합니다.

다른 팁

서브 클래스 Circleshape 생성자는 4 개의 Args를 취합니다. Draw () 메소드에서 처음 3 개의 Args는 4 번째 Arg로 전달되어 DrawingApi의 하위 클래스가 될 수 있습니다. 그렇다면 브리지 패턴을 사용하여 유연성을 높일 수 있다는 것을 의미합니까? 그리고이 예가 우리에게 말할 수있는 더 많은 것이 있습니까?

유연성만이 아닙니다. 브리지 패턴은 구현에서 추상화를 분리하며 둘 다 다르게 다를 수 있습니다..

부터 CircleShape 포함 할 구성을 사용합니다 DrawingAPI 상속을 통해 교체 할 수 있습니다 DrawingAPI 여러 구현 중 하나가있는 API DrawingAPI

Shape 그리고 CircleShape 의존하지 않고 독립적으로 변할 수 있습니다 DrawingAPI.

아래 SE 게시물에서 브리지 패턴에 대한 자세한 내용을 찾을 수 있으며 다른 예를 설명합니다.

브리지 패턴이 구현에서 추상화를 분리합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top