문제
나는이 브리지 패턴 예제에서 시간을 보냈다. 위키 백과, 그러나 나는 여전히이 브리지 패턴이 설명하려고하는 것을 이해하지 못한다.
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 게시물에서 브리지 패턴에 대한 자세한 내용을 찾을 수 있으며 다른 예를 설명합니다.