Quando herança não escala
Se uma transmissão pode ser compactada, criptografada e registrada, criar uma classe para cada combinação torna a hierarquia difícil de manter. Decorators encadeáveis permitem ativar cada capacidade por composição.
Exemplo em C#
public interface IFluxo
{
byte[] Ler();
}
public sealed class FluxoComLog(IFluxo interno) : IFluxo
{
public byte[] Ler()
{
Console.WriteLine("Leitura iniciada");
return interno.Ler();
}
}O decorator cumpre o contrato original e delega à instância envolvida. Outra implementação poderia comprimir ou criptografar dados, com ordem de composição deliberada.
Quando usar
Use quando responsabilidades opcionais devem ser combináveis sem modificar a classe base. A pilha pode dificultar depuração e ordem de execução; documente essa ordem e evite decorators que alteram silenciosamente o contrato. Compare com Proxy, que controla acesso, e Composite, que organiza árvores. Mais no catálogo GoF.