Iterator

Solução Proposta

Define uma interface para acessar e percorrer elementos de uma coleção sem expor sua representação interna.

Vantagens

Desvantagens

Exemplo

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.

 

Diagrama de Classe

Iterator - Diagrama

Participantes

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.

 

Código

Clique aqui para fazer o download do código completo de implementação deste Design Pattern.

Padrões Relacionados