Bridge
Bridge ํจํด์ ๊ธฐ๋ฅ(Abstraction)๊ณผ ๊ตฌํ(Implementation)์ ๋ถ๋ฆฌํ์ฌ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ๋์์ธ ํจํด์ ๋๋ค.
+------------------+
| Abstraction | <-- ๊ธฐ๋ฅ ๊ณ์ธต (์ถ์ ํด๋์ค)
+------------------+
|
| (๊ตฌํ ๊ฐ์ฒด ์ฐธ์กฐ)
v
+------------------+
| RefinedAbstraction|
+------------------+
|
| (๊ตฌํ ๊ณ์ธต๊ณผ ์ฐ๊ฒฐ)
v
+------------------+
| Implementor | <-- ๊ตฌํ ๊ณ์ธต (์ธํฐํ์ด์ค)
+------------------+
/ \
/ \
v v
+------------------+ +---------------------+
|ConcreteImplementor1| |ConcreteImplementor2|
+------------------+ +---------------------+
์ด ํจํด์ ์ฌ์ฉํ๋ฉด ์์์ ์์กดํ์ง ์๊ณ ๋ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ ์ํฌ ์ ์์ผ๋ฏ๋ก, ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
How do code
// ๊ตฌํ๋ถ ์ธํฐํ์ด์ค (Implementor)
@FunctionalInterface
public interface DrawingAPI {
void drawCircle(double x, double y, double radius);
}
public class BridgePattern {
// ๊ธฐ๋ฅ ๊ณ์ธต (Abstraction)
public static abstract class Shape {
protected DrawingAPI drawingAPI;
protected Shape(DrawingAPI drawingAPI) {
this.drawingAPI = drawingAPI;
}
public abstract void draw();
public abstract void resizeByPercentage(double pct);
}
// ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฅ ํด๋์ค
public static class CircleShape extends Shape {
private double x, y, radius;
public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI) {
super(drawingAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public void draw() {
drawingAPI.drawCircle(x, y, radius);
}
@Override
public void resizeByPercentage(double pct) {
radius *= (1.0 + pct / 100.0);
}
}
public static void main(String[] args) {
// ๋๋ค ํํ์์ผ๋ก DrawingAPI ๊ตฌํ
DrawingAPI api1 = (x, y, radius) ->
System.out.println("Lambda API1 - ์: (" + x + ", " + y + ") ๋ฐ์ง๋ฆ: " + radius);
DrawingAPI api2 = (x, y, radius) ->
System.out.println("Lambda API2 - ์: (" + x + ", " + y + ") ๋ฐ์ง๋ฆ: " + radius);
Shape circle1 = new CircleShape(1, 2, 3, api1);
Shape circle2 = new CircleShape(5, 7, 11, api2);
circle1.resizeByPercentage(50);
circle2.resizeByPercentage(50);
circle1.draw();
circle2.draw();
}
}
Last updated