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.