PATRON ITERATOR

Motivación:
La idea principal en este patrón es tomar la responsabilidad del acceso y recorrido de la lista y colocarla dentro del objetoiterator. La clase Iterator define una interfaz para el acceso de los elementos de la lista. Un objeto iterador es responsable de mantener la pista del elemento actual; esto es, sabe cuáles elementos ya han sido recorridos. 

Separar el mecanismo de recorrido del objeto List nos permite definir iteradores para diferentes políticas de recorrido sin tener que enumerarlas en la interfaz de List. 

Cabe notar que el iterador y la lista están acoplados, y el cliente debe saber que es una lista lo que se está recorriendo, en lugar de algún otra estructura agregada. De ahí que el cliente comprometa una estructura agregada particular. Sería mejor si se pudira cambiar la clase agregada sin cambiar el código cliente. Esto se logra generalizando el concepto de iterador para soportar iteración polimorfa

Se define  una clase AbstractList que provea una interfaz común para manipular listas. De igual forma, necesitamos una clase abstracta Iterator que defina una interfaz de iteración común. Luego podemos definir subclasses iteradoras concretas para las diferentes implementaciones de la lista. Como resultado, el mecanismo de iteración llega a ser independiente de las clases agregadas concretas. 

El problema restante radica en cómo crear el iterador. Como se quiere es escribir código independiente de las subclasses concretas de List, no se puede instanciar una clase específica. En su lugar, hay q hacer  a los objetos de la lista responsables por la creación de su iterador correspondiente. Esto requiere una operación tal como CreateIterator, por medio de la cual los clientes solicitan un objeto iterador.

Estructura:
Participantes:
  • Iterator: 
El cual define una interfaz para el acceso y recorrido de los elementos.
  • ConcreteIterator: 
El cual implementa la interfaz de Iterator y mantiene la pista de la posición actual en el recorrido del agregado.
  • Aggregate: 
El cual define una interfaz para la creación de un objeto Iterator.
  • ConcreteAggregate: 
El cual implementa la interfaz de creación de Iterator para retornar una instancia del ConcreteIterator adecuado.
Referencias:

No hay comentarios:

Publicar un comentario