Паттерн Iterator относится к поведенческим паттернам уровня объекта.
Паттерн Iterator предоставляет механизм обхода коллекций объектов не раскрывая их внутреннего представления.
Зачастую этот паттерн используется вместо массива объектов, чтобы не только предоставить доступ к элементам, но и наделить некоторой логикой.
Iterator представляет собой общий интерфейс, позволяющий реализовать произвольную логику итераций.
Требуется для реализации:
- Интерфейс Iterator описывающий набор методов для доступа к коллекции;
- Класс ConcreteIterator, реализующий интерфейс Iterator. Следит за позицией текущего элемента при переборе коллекции (Aggregate).;
- Интерфейс Aggregate описывающий набор методов коллекции объектов;
- Класс ConcreteAggregate, реализующий интерфейс Aggregate и хранящий в себе элементы коллекции.
[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Значение этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.