Wzorce projektowe - wzorzec mostu
Mostek jest używany, gdy musimy oddzielić abstrakcję od jej implementacji, aby obie mogły się zmieniać niezależnie. Ten typ wzorca projektowego podlega wzorcowi strukturalnemu, ponieważ ten wzorzec oddziela klasę implementacji od klasy abstrakcyjnej, zapewniając między nimi strukturę pomostową.
Ten wzorzec obejmuje interfejs, który działa jak most, który sprawia, że funkcjonalność klas konkretnych jest niezależna od klas implementujących interfejs. Oba typy klas można zmieniać strukturalnie bez wzajemnego wpływu.
Przedstawiamy użycie wzorca Bridge za pomocą następującego przykładu, w którym okrąg można narysować w różnych kolorach przy użyciu tej samej metody klasy abstrakcyjnej, ale różnych klas implementujących most.
Realizacja
Mamy interfejs DrawAPI , który działa jako implementujący mostek oraz konkretne klasy RedCircle , GreenCircle implementujące interfejs DrawAPI . Shape jest klasą abstrakcyjną i będzie używać obiektu DrawAPI . BridgePatternDemo , nasza klasa demonstracyjna będzie używać klasy Shape do rysowania różnych kolorowych kół.
Krok 1
Utwórz interfejs implementujący most.
DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
Krok 2
Utwórz konkretne klasy implementujące mostek implementujące interfejs 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 + "]");
}
}
Krok 3
Utwórz klasę abstrakcyjną Shape za pomocą interfejsu DrawAPI .
Shape.java
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
Krok 4
Utwórz konkretną klasę implementującą interfejs 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);
}
}
Krok 5
Użyj klas Shape i DrawAPI , aby narysować różne kolorowe koła.
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();
}
}
Krok 6
Sprawdź dane wyjściowe.
Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[ color: green, radius: 10, x: 100, 100]