Design Patterns - Bridge Pattern

Bridge viene utilizzato quando è necessario disaccoppiare un'astrazione dalla sua implementazione in modo che le due possano variare indipendentemente. Questo tipo di modello di progettazione rientra nel modello strutturale poiché questo modello disaccoppia la classe di implementazione e la classe astratta fornendo una struttura a ponte tra di loro.

Questo modello coinvolge un'interfaccia che funge da ponte che rende la funzionalità delle classi concrete indipendenti dalle classi implementatrici dell'interfaccia. Entrambi i tipi di classi possono essere modificati strutturalmente senza influenzarsi a vicenda.

Stiamo dimostrando l'uso del pattern Bridge tramite il seguente esempio in cui un cerchio può essere disegnato in diversi colori usando lo stesso metodo di classe astratta ma diverse classi di implementazione del bridge.

Implementazione

Abbiamo un'interfaccia DrawAPI che funge da implementatore di bridge e classi concrete RedCircle , GreenCircle che implementano l' interfaccia DrawAPI . Shape è una classe astratta e utilizzerà l'oggetto DrawAPI . BridgePatternDemo , la nostra classe demo utilizzerà la classe Shape per disegnare cerchi colorati diversi.

Passo 1

Crea l'interfaccia per l'implementazione del bridge.

DrawAPI.java

public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}

Passo 2

Crea classi di implementazione di ponti in cemento che implementano l' interfaccia 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 + "]");
   }
}

Passaggio 3

Creare una forma di classe astratta utilizzando l' interfaccia DrawAPI .

Shape.java

public abstract class Shape {
   protected DrawAPI drawAPI;
   
   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();	
}

Passaggio 4

Crea una classe concreta che implementa l' interfaccia 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);
   }
}

Passaggio 5

Usa le classi Shape e DrawAPI per disegnare cerchi colorati diversi.

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

Passaggio 6

Verifica l'output.

Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[  color: green, radius: 10, x: 100, 100]