Patrón Iterador
El patrón iterador (Iterator Pattern) es un patrón de diseño muy utilizado en los entornos de programación Java y .Net.
El patrón iterador proporciona un método para acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.
El patrón iterador pertenece a los patrones de comportamiento.
Introducción
Intención
Permite acceder secuencialmente a los elementos de un objeto agregado sin exponer la representación interna del objeto.
Problemas principales que resuelve
- Proporciona un método unificado para recorrer diferentes objetos agregados.
Escenarios de uso
- Cuando se necesita recorrer un objeto agregado sin exponer su estructura interna.
Método de implementación
- Definir la interfaz del iterador: contiene
hasNext()ynext()y otros métodos, utilizados para recorrer los elementos. - Crear el iterador concreto: implementa la interfaz del iterador y define cómo recorrer un objeto agregado específico.
- Clase agregada: define una interfaz para devolver un objeto iterador.
Código clave
- Interfaz del iterador: especifica los métodos para recorrer los elementos.
- Iterador concreto: implementa la interfaz del iterador y contiene la lógica de recorrido.
Ejemplos de aplicación
- Iterator en Java: el iterador del marco de colecciones de Java se utiliza para recorrer los elementos de las colecciones.
Ventajas
- Soporta múltiples formas de recorrido: diferentes iteradores pueden definir diferentes formas de recorrido.
- Simplifica las clases agregadas: la clase agregada no necesita preocuparse por la lógica de recorrido.
- Soporte de múltiples recorridos: se puede recorrer el mismo objeto agregado varias veces al mismo tiempo.
- Extensibilidad: es conveniente agregar nuevas clases agregadas y clases de iterador, sin necesidad de modificar el código existente.
Desventajas
- Complejidad del sistema: por cada clase agregada que se agregue, se debe agregar una clase de iterador correspondiente, lo que aumenta el número de clases.
Recomendaciones de uso
- Cuando se necesite acceder al contenido de un objeto agregado sin exponer su representación interna, use el patrón iterador.
- Cuando se necesite proporcionar múltiples formas de recorrido para un objeto agregado, considere usar el patrón iterador.
Consideraciones
- El patrón iterador, al separar el comportamiento de recorrido de los objetos de colección, permite que el código externo acceda de forma transparente a los datos internos de la colección sin exponer su estructura interna.
Estructura
El patrón iterador incluye los siguientes roles principales:
Interfaz del iterador (Iterator): define los métodos para acceder y recorrer los elementos de un objeto agregado; generalmente incluye métodos como obtener el siguiente elemento, comprobar si hay más elementos, obtener la posición actual, etc.
Iterador concreto (Concrete Iterator): implementa la interfaz del iterador, se encarga de recorrer y acceder al objeto agregado, y registra la posición actual del recorrido.
Interfaz del objeto agregado (Aggregate): define la interfaz para crear objetos iterador; generalmente incluye un método de fábrica para crear el objeto iterador.
Objeto agregado concreto (Concrete Aggregate): implementa la interfaz del objeto agregado, se encarga de crear el objeto iterador concreto y proporciona los datos que deben recorrerse.
Implementación
Crearemos una que describe los métodos de navegaciónIteratorinterfaz y una que devuelve un iteradorContainerinterfaz. La clase concreta que implementaContainerla interfaz se encargará de implementarIteratorla interfaz.
IteratorPatternDemo, nuestra clase de demostración utiliza la clase concretaNamesRepositorypara imprimirNamesRepositoryque contiene almacenados como colecciónNames。
Paso 1
Crear la interfaz:
Iterator.java
Container.java
Paso 2
Crear la clase que implementaContainerla interfaz. Esta clase tiene una clase que implementaIteratorla interfaz, la clase internaNameIterator。
NameRepository.java
Paso 3
UsarNameRepositorypara obtener el iterador e imprimir los nombres.
IteratorPatternDemo.java
Paso 4
Ejecutar el programa y ver el resultado:
Name : Robert Name : John Name : Julie Name : LoraOtras extensiones