Padrões de projeto - padrão de ponte

Bridge é usado quando precisamos desacoplar uma abstração de sua implementação para que as duas possam variar independentemente. Esse tipo de padrão de design vem sob o padrão estrutural, pois esse padrão desacopla a classe de implementação e a classe abstrata, fornecendo uma estrutura de ponte entre elas.

Este padrão envolve uma interface que atua como uma ponte que torna a funcionalidade de classes concretas independente das classes implementadoras de interface. Ambos os tipos de classes podem ser alterados estruturalmente sem afetar um ao outro.

Estamos demonstrando o uso do padrão Bridge por meio do exemplo a seguir, no qual um círculo pode ser desenhado em cores diferentes usando o mesmo método de classe abstrata, mas diferentes classes implementadoras de bridge.

Implementação

Temos uma interface DrawAPI que atua como um implementador de bridge e classes concretas RedCircle , GreenCircle implementando a interface DrawAPI . Shape é uma classe abstrata e usará o objeto de DrawAPI . BridgePatternDemo , nossa classe de demonstração usará a classe Shape para desenhar círculos de cores diferentes.

Passo 1

Crie a interface do implementador de ponte.

DrawAPI.java

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

Passo 2

Crie classes de implementador de ponte concreta implementando a 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 + "]");
   }
}

etapa 3

Crie uma classe abstrata Shape usando a interface DrawAPI .

Shape.java

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

Passo 4

Crie uma classe concreta implementando a 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);
   }
}

Etapa 5

Use as classes Shape e DrawAPI para desenhar círculos de cores diferentes.

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

Etapa 6

Verifique a saída.

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