Ітератор (шаблон проектування)
Матеріал з Вікіпедії — вільної енциклопедії.
Ітератор (англ. Iterator) – шаблон проектування, відноситься до класу шаблонів поведінки.
Зміст |
[ред.] Призначення
Надає спосіб послідовного доступу до всіх елементів складеного об'єкту, не розкриваючи його внутрішнього улаштування.
[ред.] Мотивація
Складений об'єкт, скажімо список, повинен надавати спосіб доступу до своїх елементів, не розкриваючи їх внутрішню структуру. Більш того, іноді потребується обходити список по-різному, у залежності від задачі, що вирішується. При цьому немає ніякого бажання засмічувати інтерфейс класу Список усілякими операціями для усіх потрібних варіантів обходу, навіть якщо їх усі можна передбачити заздалегідь. Крім того, іноді потребується щоб у один момент часу існувало декілька активних операцій обходу списку.
Все це призводить до необхідності реалізації шаблону Ітератор. Його основна ідея у тому, щоб за доступ до елементів та обхід списку відповідав не сам список, а окремий об'єкт-ітератор. У класі Ітератор означений інтерфейс для доступу до елементів списку. Об'єкт цього класу прослідковує поточний елемент, тобто він володіє інформацією, які з елементів вже відвідувались.
[ред.] Застосовність
Можна використовувати шаблон Ітератор у випадках:
- для доступу до змісту агрегованих об'єктів не розкриваючи їх внутрішнє улаштування;
- для підтримки декількох активних обходів одного й того ж агрегованого об'єкту;
- для подання уніфікованого інтерфейсу з метою обходу різноманітних агрегованих структур (тобто для підтримки поліморфної ітерації).
[ред.] Структура

- Iterator
- визначає інтерфейс для доступу та обходу елементів
- ConcreteIterator
- реалізує інтерфейс класу Iterator;
- слідкує за поточною позицією під час обходу агрегату;
- Aggregate
- визначає інтерфейс для створення об'єкту-ітератору;
- ConcreteAggregate
- реалізує інтерфейс створення ітератору та повертає екземпляр відповідного класу ConcreteIterator
[ред.] Відносини
ConcreteIterator відслідковує поточний об'єкт у агрегаті та може вирахувати наступний.
[ред.] Джерела
- Design Patterns: Elements of Reusable Object-Oriented Software