Итератор (Iterator)

Метафора

 

Все помнят школьное «на первый второй рассчитайся!»? Вот именно в этот момент шеренга вашего класса и являлась реализацией паттерна «итератор», хотя в программировании это конечно более функциональное понятие, но суть примерно та же. «Итератор» предоставляет правила доступа к списку каких-либо объектов независимо от того, что это за объекты. То есть не важно, какой именно класс построен и из каких учеников, должны быть общие правила подсчета и обращения как каждому ученику по списку, вроде «13-ый, выйти из строя». Ссылки, которые вы видите на многих сайтах для переходов по страницам, вроде «следующая», «предыдущая», «в начало» и т.п. по своей сути также являются доступом «итератору» который отвечает за страницы сайта.

 

Назначение

 

Паттерн предоставляет способ последовательного доступа ко всем элементам составного объекта, не раскрывая его внутреннего представления. Итератор предоставляет абстрактный интерфейс для доступа к содержимому составных объектов, не раскрывая клиентам их внутреннюю структуру.

Преимущества:

  • Поддерживает различные способы перебора агрегата, одновременно могут быть активны несколько переборов.

 

Диаграмма

 

Итератор

Итератор

 

Клиент работает с абстрактным интерфейсом итератора, реализацию которого, получает от конкретного составного объекта. Конкретный итератор следит за текущей позицией в конкретном агрегате.

 

Пример

 

В данном примере мы сделали простейший итератор по таблице из объекта lcl_aggregate. Последовательность доступа к таблице относительно текущей позиции в итераторе.

Итераторы широко используются в библиотеках работы с XML, например, в iXML для обхода DOM:

Еще один пример итератора из стандарта — cl_object_collection: