miércoles, 26 de diciembre de 2012

Patrón de diseño Iterator

Es una patrón de comportamiento.  Permite acceder a una colección de objetos de forma secuencial.

Por ejemplo, imaginemos que tenemos una colección de objetos en forma de árbol creada con el patrón composite y queremos recorrerla en preorden, inorden y postorden. Este patrón nos viene como anillo al dedo, permitiéndonos encapsular este comportamiento fuera de la estructura y ocultando al usuario la forma de recorrerla (si nos interesa).

Estructura genérica:


Roles de cada clase:
  • Iterador (Iterador): define la interfaz para acceder y recorrer los elementos de un agregado.
  • IteradorConcreto (IteradorLista o IteradorArbol): implementa la interfaz del iterador y guarda la posición actual del recorrido en cada momento.
  • Agregado (ListaAbstracta): define una interfaz para crear un objeto iterador.
  • AgregadoConcreto (Lista o Arbol): implementa la interfaz de creación de iteradores devolviendo una instancia del iterador concreto apropiado.
Algunas clases pueden tener varios roles a la vez. No es necesario tener una clase exclusiva para crear un iterador. En el siguiente código de ejemplo no incluyo la clase AgregadoConcreto ya que la estructura de árbol y el iterador los creo desde el programa principal. Código: PatronIterator

Frequency Answers and Questions

  • ¿Quién controla la iteración?. Cuando el cliente controla la iteración se dice que el iterador es externo, pero cuando lo controla el propio iterador se dice que es interno.
  • ¿Cómo de robusto es el iterador?. Un iterador es robusto cuando las inserciones y borrado no interfieren en el recorrido.
  • ¿Para qué puede servir un iterador nulo?. Puede ser útil para estructuras recursivas como las de composición (hoja de un composite).



No hay comentarios:

Publicar un comentario