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]