Decorando objetos Java: uma introdução ao padrão Decorator

Por Gaspar Barancelli Junior em 23 de setembro de 2023

O padrão de projeto Decorator é uma técnica de design que permite adicionar comportamento a um objeto existente em tempo de execução, sem afetar a estrutura subjacente do objeto. O padrão Decorator é comumente usado quando se deseja estender a funcionalidade de um objeto sem criar subclasses adicionais ou alterar seu comportamento original.

Exemplo de implementação em Java

Vamos considerar um exemplo simples de como usar o padrão Decorator em Java. Digamos que você tenha uma interface Cafe que possua apenas o método custo() responsável por retornar o preço do café:

public interface Cafe {
    double custo();
}

Temos uma implementação para a interface Cafe, uma classe de café básico que custa R$ 1,00:

public class CafeBasico implements Cafe {

    @Override
    public double custo() {
        return 1.0;
    }
}

Agora, se quisermos adicionar novos comportamentos ao objeto CafeBasico, podemos usar uma classe decoradora. Vamos criar uma nova classe decoradora chamada de CafeComLeiteDecorator que adiciona leite ao café:

public class CafeComLeiteDecorator implements Cafe {

    private Cafe cafe;

    public CafeComLeiteDecorator(Cafe cafe) {
        this.cafe = cafe;
    }

    @Override
    public double custo() {
        return cafe.custo() + 0.5;
    }
}

Observe que a classe CafeComLeiteDecorator implementa a mesma interface Cafe que a classe CafeBasico. Isso significa que a classe CafeComLeiteDecorator pode ser usada como um objeto Cafe em outros lugares do código.

A classe CafeComLeiteDecorator contém um objeto Cafe que é passado como um parâmetro em seu construtor. O método custo() da classe CafeComLeiteDecorator adiciona o custo do leite R$ 0,50 ao custo do café original, que é retornado pelo método custo() do objeto Cafe.

Agora, podemos criar um novo objeto de café decorado com leite usando a seguinte linha de código:

Cafe cafeComLeite = new CafeComLeiteDecorator(new CafeBasico());

A variável cafeComLeite é um objeto Cafe decorado com leite, que pode ser usado como um objeto Cafe em outros lugares do código. Podemos, então, chamar o método custo() do objeto cafeComLeite para obter o preço total do café com leite:

double custo = cafeComLeite.custo();
System.out.println("Café com leite custa: R$ " + custo);

O resultado será:

Café com leite custa: R$ 1.5

Conclusão

O padrão de projeto Decorator é uma técnica poderosa para adicionar comportamento a objetos existentes em tempo de execução. Ele permite que você adicione novos comportamentos sem afetar a estrutura subjacente do objeto, tornando-o uma ferramenta valiosa para a criação de código flexível e extensível.

// Compartilhe esse Post

💫
🔥 NOVO APP

Domine o Inglês em 30 dias!

Inteligência Artificial + Repetição Espaçada • Método cientificamente comprovado

✅ Grátis para começar 🚀 Resultados rápidos
×