Modèles de conception - Modèle de pont

Bridge est utilisé lorsque nous devons découpler une abstraction de son implémentation afin que les deux puissent varier indépendamment. Ce type de modèle de conception relève d'un modèle structurel car ce modèle dissocie la classe d'implémentation et la classe abstraite en fournissant une structure de pont entre elles.

Ce modèle implique une interface qui agit comme un pont qui rend la fonctionnalité des classes concrètes indépendante des classes d'implémentation d'interface. Les deux types de classes peuvent être modifiés structurellement sans s’affecter mutuellement.

Nous démontrons l'utilisation du modèle Bridge via l'exemple suivant dans lequel un cercle peut être dessiné dans différentes couleurs en utilisant la même méthode de classe abstraite mais différentes classes d'implémentation de pont.

la mise en oeuvre

Nous avons une interface DrawAPI qui agit comme un implémenteur de pont et des classes concrètes RedCircle , GreenCircle implémentant l' interface DrawAPI . Shape est une classe abstraite et utilisera l'objet de DrawAPI . BridgePatternDemo , notre classe de démonstration utilisera la classe Shape pour dessiner des cercles de couleurs différentes.

Étape 1

Créez une interface de mise en œuvre de pont.

DrawAPI.java

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

Étape 2

Créez des classes d'implémentation de ponts concrets implémentant l' interface 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 + "]");
   }
}

Étape 3

Créez une classe abstraite Shape à l'aide de l' interface DrawAPI .

Shape.java

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

Étape 4

Créez une classe concrète implémentant l' interface 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);
   }
}

Étape 5

Utilisez les classes Shape et DrawAPI pour dessiner différents cercles colorés.

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

Étape 6

Vérifiez la sortie.

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