Sobes.tech
Junior — Middle

Czy możesz wyjaśnić, na czym polega wzorzec projektowy iteratora i jak jest stosowany?

sobes.tech AI

Odpowiedź od AI

Wzorzec projektowy Iterator służy do sekwencyjnego przechodzenia przez elementy kolekcji bez ujawniania jej wewnętrznej struktury.

Główna idea:

  • Iterator zapewnia interfejs do dostępu do elementów kolekcji po jednym.
  • Umożliwia kodowi klienta przechodzenie przez elementy, nie znając, jak dokładnie kolekcja jest zorganizowana wewnątrz.

W C# iterator jest implementowany za pomocą interfejsów IEnumerator i IEnumerable. Zazwyczaj używa się słowa kluczowego yield, które upraszcza tworzenie iteratorów.

Przykład iteratora w C#:

using System;
using System.Collections;
using System.Collections.Generic;

class MyCollection : IEnumerable<int>
{
    private int[] data = {1, 2, 3, 4, 5};

    public IEnumerator<int> GetEnumerator()
    {
        foreach (var item in data)
        {
            yield return item; // zwraca elementy po jednym
        }
    }

    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}

class Program
{
    static void Main()
    {
        var collection = new MyCollection();
        foreach (var item in collection)
        {
            Console.WriteLine(item);
        }
    }
}

Tutaj MyCollection implementuje IEnumerable<int>, co pozwala na użycie foreach do przechodzenia po elementach. Iterator ukrywa szczegóły przechowywania danych i zapewnia prosty sposób ich iteracji.