Patrón Iterador Java

En el post anterior, implementamos nuestra propia versión de la interfaz Iterador. Esta vez, vamos a utilizar la interfaz que nos brinda Java por defecto: java.util.Iterator para demostrar el patrón iterador Java.

Al utilizar esta interfaz, en lugar de la creada por nosotros, podemos simplificar nuestro ejemplo anterior un poco, ya que, muchas de las clases que heredan de la interfaz Collection ya ofrecen un método que retorna un objeto del tipo Iterator.

Esta es la definición de la interfaz Iterator.

Definición de la interfaz iterador

Esta vez tenemos un método adicional llamado remove(). Este método se encarga de remover el elemento actual del iterador. Este método sólo lo debemos implementar si vamos a ofrecer esa funcionalidad. En caso contrario, lo que podemos hacer es lanzar una excepción si alguna clase desea utilizarlo, esto con el fin de garantizar que nuestra aplicación no falle al momento de ser ejecutada.

Nuestra clase ArrayListIterator ya no es necesaria, ya que la clase ArrayList nos ofrece un método llamado iterator() que retorna un objeto de tipo Iterator. (Otras clases dentro de Collection también ofrecen un método que retorna un Iterator.)

El nuevo diagrama de clases sería el siguiente.

Diagrama de clases del ejemplo utilizando el patrón iterador java

El diagrama de clases actualizado del patrón usando la interfaz Iterator sería el siguiente.

Diagrama de clases del patrón iterador java

El método saveDocuments ahora recibe un objeto del tipo Iterator. Al igual que antes, esta clase no conoce la implementación de quien la esta utilizando, puede ser un ArrayList, un Array o inclusive un HashMap. La única condición es que envíe un objeto del tipo Iterator.

/**
 * Handle the items to be saved regardless of their container implementation
 * @param documents The iterable entity that contains all the items
 */
public void saveDocuments(Iterator<MyDocument> documents) {
	// if there are more items
	while(documents.hasNext()) {
		// save the document
	        save((MyDocument)documents.next());
	}
	System.out.println();
}

El resultado de ejecutar el código de ejemplo es el siguiente. Esta vez, creamos un cliente adicional, el cual, deseaba almacenar archivos XML utilizando un HashMap.

Resultado de ejecutar el código de ejemplo

El código de ejemplo del patrón iterador Java lo pueden descargar aquí.

En el próximo post vamos a discutir el Patrón llamado Compuesto.

Recordá suscribirte aquí para recibir las últimas actualizaciones todas las semanas.

Referencias:
Libro Head First Design Patterns. Versión digital.

Leave a Reply

Your email address will not be published. Required fields are marked *