Patrón Iterator

PUBLICADO: 2026-08-17
AUTOR: MANUEL PRIETO
Patrones de Diseño

💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Iterator

Iterator (Iterador) es un patrón de diseño comportamental que permite recorrer los elementos de una colección sin exponer su representación subyacente (lista, pila, árbol, grafo).

Propósito y Caso de Uso

Utiliza Iterator cuando quieras ofrecer una forma uniforme de recorrer distintas estructuras de datos (un array, un árbol de categorías, un stream paginado de una API) sin que el cliente conozca los detalles internos de cada una. También permite tener varios recorridos simultáneos e independientes sobre la misma colección.

Estructura del Patrón

  1. Iterador (Interfaz): Declara métodos para recorrer la colección (hasNext(), next()).
  2. Iterador Concreto: Implementa el recorrido específico y mantiene el estado de la posición actual.
  3. Colección Iterable: Expone un método (createIterator()) que devuelve un nuevo iterador sobre sí misma.
Cargando diagrama...

Flujo de Funcionamiento

  1. Creación: El cliente pide a la colección un iterador nuevo.
  2. Recorrido: El cliente llama repetidamente a hasNext()/next() sin conocer si es un array, árbol o lista enlazada.
  3. Independencia: Cada iterador mantiene su propio puntero, permitiendo recorridos paralelos sobre la misma colección.

Ejemplos de Implementación Reales

Cuándo NO usarlo

Si la colección es un simple array y ya cuentas con iteradores nativos del lenguaje (for...of, foreach, comprensiones), crear un iterador propio es redundante (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →).