O padrão de ponte em Java

O padrão de ponte em Java

1. Visão geral

A definição oficial para o padrão de design de Bridge introduzida pelo Gang of Four (GoF) é separar uma abstração de sua implementação para que os dois possam variar independentemente.

Isso significa criar uma interface de ponte que usa princípios de POO para separar responsabilidades em diferentes classes abstratas.

2. Exemplo de padrão de ponte

Para o padrão Bridge, vamos considerar duas camadas de abstração; um é a forma geométrica (como triângulo e quadrado) que é preenchida com cores diferentes (nossa segunda camada de abstração):

image

Primeiro, vamos definir uma interface de cores:

public interface Color {
    String fill();
}

Agora vamos criar uma classe concreta para esta interface:

public class Blue implements Color {
    @Override
    public String fill() {
        return "Color is Blue";
    }
}

Vamos agora criar uma classe abstrataShape que consiste em uma referência (ponte) para o objetoColor:

public abstract class Shape {
    protected Color color;

    //standard constructors

    abstract public String draw();
}

Agora vamos criar uma classe concreta de interfaceShape que utilizará o método da interfaceColor também:

public class Square extends Shape {

    public Square(Color color) {
        super(color);
    }

    @Override
    public String draw() {
        return "Square drawn. " + color.fill();
    }
}

Para esse padrão, a seguinte asserção será verdadeira:

@Test
public void whenBridgePatternInvoked_thenConfigSuccess() {
    //a square with red color
    Shape square = new Square(new Red());

    assertEquals(square.draw(), "Square drawn. Color is Red");
}

Aqui, estamos usando o padrão Bridge e passando o objeto de cor desejado. Como podemos observar na saída, a forma é desenhada com a cor desejada:

Square drawn. Color: Red
Triangle drawn. Color: Blue

3. Conclusão

Neste artigo, vimos o padrão de design da ponte. Essa é uma boa escolha nos seguintes casos:

  • Quando queremos que uma classe abstrata pai defina o conjunto de regras básicas e as classes concretas para adicionar regras adicionais

  • Quando temos uma classe abstrata que tem uma referência aos objetos e métodos abstratos que serão definidos em cada uma das classes concretas

O código-fonte completo para este exemplo está disponívelover on GitHub.