O exemplo do mundo real
Uma pasta contém arquivos e outras pastas. Para calcular tamanho ou exibir conteúdo, o programa não deveria precisar ramificar a cada nível da árvore. A pasta agrega filhos; o arquivo é uma folha.
Exemplo em C#
public interface IItem
{
long TamanhoEmBytes();
}
public sealed record Arquivo(long Bytes) : IItem
{
public long TamanhoEmBytes() => Bytes;
}
public sealed class Pasta(IEnumerable<IItem> itens) : IItem
{
public long TamanhoEmBytes() => itens.Sum(x => x.TamanhoEmBytes());
}A mesma operação recursiva funciona tanto em um arquivo quanto numa pasta composta por outros componentes.
Cuidados
Defina regras de ciclo de vida, remoção, referências cíclicas e operações que fazem sentido em folhas. Se a interface comum ficar cheia de métodos inválidos para arquivos, modele abstrações mais específicas. Compare com Decorator, que envolve um objeto para acrescentar comportamento; veja o guia GoF.