Este patrón se utiliza en relación a objetos que almacenan colecciones de otros objetos, por ejemplo, las listas. El uso de un objeto Iterador permite recorrer los elementos del agregado independientemente de su organización.
Si todos los objetos agregado (listas, árboles, etc) generan un objeto Iterador con el mismo interfaz resulta muy fácil operar con ellos y se facilitan los cambios de implementación.
El objeto agregado puede crear objetos Iterador para la implementación concreta de dicho agregado. Diferentes implementaciones, diferentes iteradores. A partir de entonces, un objeto cliente puede manipular el agregado únicamente
a través del iterador. Si cambiamos la implementación del agregado (por ejemplo, la lista pasa a ser un árbol), el objeto cliente no resulta afectado. Se trata de un patrón muy común y ampliamente utilizado. En el caso
de las listas, podríamos recorrerla sin exponer su estructura interna, permitiendo así diferentes tipos de listas (listas normales, con vectores, etc) y diferentes tipos de iteradores: