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