Padrão de Projeto Iterator Projeto de Sistemas de Software Thiago Pinheiro de Araújo
Iterator Motivação Permitir uma iteração por todos os elementos de um agregado, independente da estrutura de armazenamento. Fornecer uma forma de acesso genérica aos elementos de um agregado sem expor sua representação interna. Fazer duas iterações concorrentes em um agregado, cuja interface pode só permitir uma única por vez. Ex: Arvore binária. © LES/PUC-Rio
Iterator Propósito Padronizar a iteração sobre os elementos de agregados. Permitir modificações na estrutura interna do agregado sem afetar quem faz uso dele apenas para iteração. Permitir a troca do tipo do agregado sem afetar quem faz uso dele apenas para iteração. © LES/PUC-Rio
Iterator Aplicabilidade Prover interface única de iteração sobre agregados. Onde existe ganho em usar um objeto, obtido através do padrão de projeto Factory, responsável pela iteração sobre os elementos do agregado. © LES/PUC-Rio
Iterator Estrutura © LES/PUC-Rio
Iterator Participantes IAgregate ConcreteAgregate Iterator Interface que especifica a fábrica de iteradores. ConcreteAgregate Armazena os elementos efetivamente em uma estrutura de interesse. Define o método de criação do seu iterador. Iterator Interface que define primitivas de controle sobre a iteração dos elementos. ConcreteIterator Implementa as primitivas de controle sobre a iteração. © LES/PUC-Rio
Iterator Colaborações O usuário do Agregado pede um iterator. O iterator mantém a posição corrente durante a iteração sobre os elementos do agregado. Para cada passo na iteração, o usuário pode realizar operações sobre o elemento. © LES/PUC-Rio
Iterator Conseqüências Generalidade na iteração sobre os elementos de um agregado. Possibilidade de realizar múltiplas iterações concorrentes sobre um agregado. Troca da implementação do agregado sem afetar quem faz iteração sobre seus elementos. © LES/PUC-Rio
Iterator © LES/PUC-Rio
Iterator Bibliografia [1] Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software, 2st edition, Addison-Wesley Professional Computing Series, 1998. © LES/PUC-Rio
Fim!