Sobes.tech
Junior — Middle

Можете ли да обясните какво представлява патърнът за дизайн на итератор и как се прилага?

sobes.tech AI

Отговор от AI

Шаблонът за дизайн Итератор е предназначен за последователно обхождане на елементите на колекция, без да разкрива нейната вътрешна структура.

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

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

В 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 за обхождане на елементите. Итераторът скрива детайлите за съхранението на данните и предоставя прост начин за обхождане.