Sobes.tech
Junior — Middle

Pode explicar o conceito e a aplicação do padrão Decorador na programação orientada a objetos?

sobes.tech IA

Resposta da IA

O padrão Decorador permite adicionar dinamicamente novas responsabilidades aos objetos, envolvendo-os em outros objetos decoradores, sem alterar o código fonte da classe. Isto é especialmente útil quando se deseja expandir a funcionalidade sem herança.

Exemplo: há uma interface base Bebida com o método custo(). Pode-se criar uma classe Café, e depois decoradores ComLeite, ComAçúcar, que adicionam ao custo e alteram o comportamento.

interface Bebida {
    double custo();
}

class Cafe implements Bebida {
    public double custo() { return 5.0; }
}

class DecoradorLeite implements Bebida {
    private Bebida bebida;
    public DecoradorLeite(Bebida bebida) { this.bebida = bebida; }
    public double custo() { return bebida.custo() + 1.0; }
}

// Uso
Bebida cafe = new Cafe();
Bebida cafeComLeite = new DecoradorLeite(cafe);
System.out.println(cafeComLeite.custo()); // 6.0

Desta forma, é possível combinar funcionalidades de forma flexível sem criar múltiplas subclasses.