DEV Community

Juarez Júnior
Juarez Júnior

Posted on

C# Design Pattern: Iterator (Portugues)

O padrão Iterator é usado para fornecer uma maneira de acessar sequencialmente os elementos de uma coleção, sem expor sua representação interna. Ele permite percorrer listas, coleções ou arrays de forma simplificada. Um exemplo seria iterar sobre uma lista de itens em um carrinho de compras, sem precisar conhecer os detalhes de como a lista foi implementada.

Exemplo de Código em C#:

// Interface do Iterador
public interface IIterador<T>
{
    bool HasNext();
    T Next();
}

// Interface da Coleção
public interface IColecao<T>
{
    IIterador<T> CriarIterador();
}

// Implementação da Coleção de Itens
public class ColecaoDeItens : IColecao<string>
{
    private List<string> _itens = new List<string>();

    public void AdicionarItem(string item)
    {
        _itens.Add(item);
    }

    public IIterador<string> CriarIterador()
    {
        return new IteradorDeItens(this);
    }

    public List<string> GetItens()
    {
        return _itens;
    }
}

// Implementação do Iterador para a Coleção de Itens
public class IteradorDeItens : IIterador<string>
{
    private ColecaoDeItens _colecao;
    private int _posicao = 0;

    public IteradorDeItens(ColecaoDeItens colecao)
    {
        _colecao = colecao;
    }

    public bool HasNext()
    {
        return _posicao < _colecao.GetItens().Count;
    }

    public string Next()
    {
        if (HasNext())
        {
            return _colecao.GetItens()[_posicao++];
        }
        return null;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Criar uma coleção de itens
        ColecaoDeItens colecao = new ColecaoDeItens();
        colecao.AdicionarItem("Item 1");
        colecao.AdicionarItem("Item 2");
        colecao.AdicionarItem("Item 3");

        // Criar o iterador
        IIterador<string> iterador = colecao.CriarIterador();

        // Percorrer a coleção usando o iterador
        while (iterador.HasNext())
        {
            Console.WriteLine(iterador.Next());
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Neste exemplo, a classe ColecaoDeItens implementa uma coleção de strings e fornece um iterador através do método CriarIterador. O IteradorDeItens implementa a interface IIterador, permitindo percorrer os itens da coleção. No programa principal, o iterador é usado para acessar cada item da coleção de forma sequencial.

Conclusão:

O padrão Iterator permite percorrer coleções de maneira consistente, sem expor a estrutura interna da coleção. Ele é útil quando você quer fornecer um meio simples de iterar sobre os elementos de uma lista, conjunto ou array.

Código fonte: GitHub

Top comments (0)