Hoje vamos analisar o padrão de design Bridge em Java. Quando temos hierarquias de interfaces tanto nas interfaces quanto nas implementações, então o padrão de design bridge é usado para desacoplar as interfaces da implementação e ocultar os detalhes da implementação dos programas clientes.
Padrão de Design Bridge
Assim como o padrão Adapter, o padrão de design bridge é um dos padrões de design estruturais. De acordo com o GoF, o padrão de design bridge é:
Desacoplar uma abstração de sua implementação para que ambas possam variar independentemente
A implementação do padrão de design bridge segue a ideia de preferir composição em vez de herança.
Exemplo de Padrão de Design Bridge em Java
Se olharmos para o padrão de design de ponte com exemplo, será fácil de entender. Vamos supor que temos uma hierarquia de interfaces em ambas as interfaces e implementações como na imagem abaixo. Agora vamos usar o padrão de design de ponte para desacoplar as interfaces da implementação. O diagrama UML para as classes e interfaces após aplicar o padrão de ponte será parecido com a imagem abaixo.
Observe a ponte entre as interfaces
Shape
e Color
e o uso de composição na implementação do padrão de ponte. Aqui está o código java para as interfaces Shape e Color. Color.java
package com.journaldev.design.bridge;
public interface Color {
public void applyColor();
}
Shape.java
package com.journaldev.design.bridge;
public abstract class Shape {
//Composição - implementador
protected Color color;
//construtor com implementador como argumento de entrada
public Shape(Color c){
this.color=c;
}
abstract public void applyColor();
}
Temos as classes de implementação Triangle e Pentagon como abaixo. Triangle.java
package com.journaldev.design.bridge;
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Triangle filled with color ");
color.applyColor();
}
}
Pentagon.java
package com.journaldev.design.bridge;
public class Pentagon extends Shape{
public Pentagon(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Pentagon filled with color ");
color.applyColor();
}
}
Aqui estão as classes de implementação para RedColor e GreenColor. RedColor.java
package com.journaldev.design.bridge;
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
GreenColor.java
package com.journaldev.design.bridge;
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
Vamos testar nossa implementação de padrão de ponte com um programa de teste. BridgePatternTest.java
package com.journaldev.design.test;
import com.journaldev.design.bridge.GreenColor;
import com.journaldev.design.bridge.Pentagon;
import com.journaldev.design.bridge.RedColor;
import com.journaldev.design.bridge.Shape;
import com.journaldev.design.bridge.Triangle;
public class BridgePatternTest {
public static void main(String[] args) {
Shape tri = new Triangle(new RedColor());
tri.applyColor();
Shape pent = new Pentagon(new GreenColor());
pent.applyColor();
}
}
A saída do programa de exemplo de padrão de ponte acima é:
Triangle filled with color red.
Pentagon filled with color green.
{
“error”: “Upstream error…”
}
Source:
https://www.digitalocean.com/community/tutorials/bridge-design-pattern-java