Iterator
Recorre los elementos de una colección sin exponer su representación interna.
Contexto
Tu colección es un árbol/grafo/stream, y quieres permitir varios tipos de recorrido (DFS, BFS) sin exponer la estructura.
Problema
Si el cliente recorre la estructura, queda acoplado a su representación.
Solución
Encapsula el recorrido en un iterador que avanza paso a paso.
#Ejemplo en C#
public class TreeNode<T>
{
public T Value { get; set; } = default!;
public List<TreeNode<T>> Children { get; } = new();
public IEnumerable<T> DepthFirst() // iterador C# con yield
{
yield return Value;
foreach (var c in Children)
foreach (var v in c.DepthFirst())
yield return v;
}
}En C#,
IEnumerable<T>+yield returnes el patrón Iterator.
Cuándo NO aplicarlo
Cuando la estructura es trivial (List<T>) y foreach ya basta.
#behavioral #gof