Patron Iterator

Ejemplo 2 

El ejemplo es muy sencillo y está relacionado con la implementación de una clase Lista
 y dos recorridos sobre ella: Recorrido hacia adelante y recorrido hacia atrás.

El diagrama de estructura estática es el siguiente:


 

1. Interface de la Lista:

Hay una clase List la cual permite crear una lista de enteros de 10 posiciones y tiene unos métodos Count, Get y Read, los cuales devuelven el número de elementos de la lista, que en este caso sencillo es 10,  y devuelven el elemento para un índice dado.

2. Clase abstracta Iterator: Define la interface para realizar el acceso y recorrido. Tiene las operaciones necesarias para tal fin: First,Next, IsDone y CurrentItem.

3. Clase ListIterator:
Hereda de la clase Iterator e implementa los métodos necesarios para el recorrido hacia adelante en una lista. Además mantiene un atributo _current el cual mantiene apuntando al elemento actual de la lista.
Los métodos funcionan así: First coloca a _current apuntando al primer elemento de la lista, Next  coloca a _current una posición más adelante de la actual,  IsDone comprueba si _current se refiere a algún elemento dentro de la lista y CurrentItem devuelve el elemento apuntado por _current

4. Clase BackIterator

Hereda de la clase Iterator e implementa los métodos necesarios para el recorrido hacia adelante en una lista. Además mantiene un atributo _current el cual mantiene apuntando al elemento actual de la lista.
Los métodos funcionan así: First coloca a _current apuntando al último elemento de la lista, Next  coloca a _current una posición anterior a la actual,  IsDone comprueba si _current se refiere a algún elemento dentro de la lista y CurrentItem devuelve el elemento apuntado por _current
 

Cuando un cliente desee recorrer una lista hacia adelante o hacia atrás crea una instancia de ListIterator o de BackIterator y realiza el recorrido de la siguiente manera: (Suponiendo que la instancia es iter)

                for (iter->First();!iter->IsDone();iter->Next())
                        {
                              // Aquí se realizan las operaciones que se deseen
                       }
 
Los archivos y el makefile para ejecutar el ejemplo se encuentran en  Ejemplo2