Composite

Compone objetos en estructuras de árbol y los trata uniformemente como si fueran individuales.

Contexto

Tu modelo es jerárquico: carpetas con archivos y subcarpetas, grupos de figuras, comentarios anidados.

Problema

Quieres tratar a hojas y compuestos con el mismo código (ej. CalcularTamaño()).

Solución

Una interfaz común (IFileSystemEntry) implementada por hojas (File) y compuestos (Directory) que delega recursivamente.

#Ejemplo en C#

public interface IFileSystemEntry { long GetSize(); }

public class File : IFileSystemEntry
{
    public long Size { get; init; }
    public long GetSize() => Size;
}

public class Directory : IFileSystemEntry
{
    private readonly List<IFileSystemEntry> _children = new();
    public void Add(IFileSystemEntry e) => _children.Add(e);
    public long GetSize() => _children.Sum(c => c.GetSize());  // recursivo y uniforme
}
Cuándo NO aplicarlo

Cuando hojas y compuestos tienen comportamientos divergentes que fuerzan ramificaciones (if (esCarpeta)).

Tradeoffs
Pro Contra
Cliente uniforme Difícil restringir tipos de hijos en la interfaz común

#structural #gof #tree