Design Patterns — Parte 18 — Iterator

Jones Roberto
Jan 2 · 4 min read

Intenção

É um padrão de design comportamental que permite atravessar elementos de uma coleção sem expor sua representação subjacente (lista, pilha, árvore, etc.).

Problema

É necessário “abstrair” a travessia de estruturas de dados totalmente diferentes, para que sejam definidos algoritmos capazes de interagir com cada um de forma transparente.

Solução

A idéia principal do padrão Iterator é extrair o comportamento de travessia de uma coleção em um objeto separado chamado iterador .

Além de implementar o próprio algoritmo, um objeto iterador encapsula todos os detalhes da travessia, como a posição atual e quantos elementos restam até o final. Por esse motivo, vários iteradores podem passar pela mesma coleção ao mesmo tempo, independentemente um do outro.

Geralmente, os iteradores fornecem um método primário para buscar elementos da coleção. O cliente pode continuar executando esse método até que não retorne nada, o que significa que o iterador percorreu todos os elementos.

Todos os iteradores devem implementar a mesma interface. Isso torna o código do cliente compatível com qualquer tipo de coleção ou algoritmo transversal, desde que haja um iterador adequado. Se você precisar de uma maneira especial de percorrer uma coleção, basta criar uma nova classe de iterador, sem precisar alterar a coleção ou o cliente.

Implementação

diagrama de classes UML para a implementação do padrão Iterator Design é apresentado abaixo:

Prós

  • Princípio de responsabilidade única . Você pode limpar o código do cliente e as coleções extraindo algoritmos volumosos volumosos em classes separadas.
  • Princípio Aberto / Fechado . Você pode implementar novos tipos de coleções e iteradores e passá-los para o código existente sem quebrar nada.
  • Você pode iterar sobre a mesma coleção em paralelo porque cada objeto iterador contém seu próprio estado de iteração.
  • Pelo mesmo motivo, você pode atrasar uma iteração e continuar quando necessário.

Contras

  • A aplicação do padrão pode ser um exagero se o aplicativo funcionar apenas com coleções simples.
  • O uso de um iterador pode ser menos eficiente do que passar diretamente pelos elementos de algumas coleções especializadas.

Exemplo

Uso do padrão

O que é oque?

Cliente

Essa é a classe que contém uma coleção de objetos e usa a operação Next do iterador para recuperar itens do agregado em uma sequência apropriada.

Iterador

Essa é uma interface que define operações para acessar os elementos da coleção em uma sequência.

ConcreteIterator

Esta é uma classe que implementa a interface Iterator.

Agregar

Esta é uma interface que define uma operação para criar um iterador.

ConcreteAggregate

Esta é uma classe que implementa uma interface agregada.

Diagrama de classes

Exemplo prático

O padrão iterator é utilizado para a construção dos Generics no C#, as listas de implementam esse pattern, vou tentar criar um exemplo simples de como fazer um iterator em C#, vamos começar criando a interface Iterator, que irá conter o seguinte código:

Em seguida irei criar a interface IAggregate que irá conter o seguinte código:

Em seguida irei criar a classe ConcreteIterator, que irá implementar nossa interface Iterator,e irá conter o seguinte código:

Em seguida irei adicionar o ConcreteAggregate que irá implementar nossa interface IAggregate, que irá conter o seguinte código:

Agora irei criar a classe Client que irá conter o seguinte código:

e por fim irei editar a nossa classe Program.cs para executar nosso iterator, e ela irá conter o seguinte código:

Lembrando que todos os exemplos usados em meus artigos estão no meu github e podem ser baixado no final de cada artigo, vou ficando por aqui até a próxima.


XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

Jones Roberto

Written by

Gerente de Desenvolvimento na XP Inc. , jogador de vídeo game, viciado em séries e .Net.

XP Inc.

XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

More From Medium

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 22 —State

Jones Roberto
Feb 19 · 4 min read

1

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 21 — Observer

Jones Roberto
Feb 4 · 4 min read

1

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 20— Memento

Jones Roberto
Jan 21 · 4 min read
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade