Um zoológico decidiu reunir, em um único sistema, módulos de diferentes sistemas de informação que gerenciam os dados dos animais existentes no zoológico. Como esses módulos foram desenvolvidos em épocas distintas, as listas de animais são representadas por estruturas diferentes, List em um módulo e Vector em outro. Deseja-se obter os dados desses módulos mantendo as representações originais inalteradas e exibí-los no novo sistema de forma homogênea, uma vez que parte do código de cada módulo utiliza implementações específicas (List ou Vector). Essas implementações são encapsulados numa interface comum (Iterator). As classes concretas AnimalCollectionVector e AnimalCollectionList implementam o médodo createIterator que retorna um Iterator de animais representado por sua respectiva estrutura de dados, VectorIterator ou ListIterator.
Iterator: Define uma interface para acessar e percorrer elementos de uma coleção.
ConcreteIterator (ListIterator, VectorIterator): Implementa a interface definida em Iterator e mantém o controle da posição corrente no percurso da coleção.
Aggregate (AnimalCollection): Define uma interface para criação de um objeto Iterator.
ConcreteIterator (AnimalCollectionVector, AnimalCollectionList): Implementa a interface de criação do Iterator para retornar uma instância do ConcreteIterator apropriado.