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