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.