Sobes.tech
Junior — Middle

Ar galite paaiškinti, kas yra iteratoriaus dizaino modelis ir kaip jis taikomas?

sobes.tech AI

Atsakymas iš AI

Паттерн проектирования Итератор (Iterator) предназначен для последовательного обхода элементов коллекции без раскрытия её внутренней структуры.

Основная идея:

  • Итератор предоставляет интерфейс для доступа к элементам коллекции по одному.
  • Позволяет клиентскому коду перебирать элементы, не зная, как именно коллекция устроена внутри.

В C# итератор реализуется с помощью интерфейса IEnumerator и IEnumerable. Обычно для удобства используется ключевое слово yield, которое упрощает создание итераторов.

Пример итератора в 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; // возвращаем элементы по одному
        }
    }

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

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

Здесь MyCollection реализует IEnumerable<int>, позволяя использовать foreach для перебора элементов. Итератор скрывает детали хранения данных и предоставляет простой способ обхода.