Итератор
Iterator
Тип поведенческий
Описан в Design Patterns Да

Iterator — поведенческий шаблон проектирования. Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов.

Например, такие элементы как дерево, связанный список, хеш-таблица и массив могут быть пролистаны (и модифицированы) с помощью объекта Итератор.

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

Особенностью полноценно реализованного итератора является то, что код, использующий итератор, может ничего не знать о типе итерируемого агрегата.

Конечно же, (в C++) почти в любом агрегате можно выполнять итерации указателем void*, но при этом:

  • не ясно, что является значением «конец агрегата», для двусвязного списка это &ListHead, для массива это &array[size], для односвязного списка это NULL
  • операция Next сильно зависит от типа агрегата.

Итераторы позволяют абстрагироваться от типа и признака окончания агрегата, используя полиморфный Next (часто реализованный как operator++ в C++) и полиморфный aggregate.end(), возвращающий значение «конец агрегата».

Таким образом, появляется возможность работы с диапазонами итераторов, при отсутствии знания о типе итерируемого агрегата. Например:

Iterator itBegin = aggregate.begin();
Iterator itEnd = aggregate.end();
func(itBegin, itEnd);

И далее:

void func(Iterator itBegin, Iterator itEnd)
{
 for( Iterator it = itBegin, it != itEnd; ++it )
 {
 }
}

Примеры

править

С#

править

PHP5

править

Пример итератора компоновщика на PHP5

править

Python

править

Rust

править

📚 Artikel Terkait di Wikipedia

Шаблон проектирования

Шаблон проектирования (паттерн, от англ. design pattern) — повторяемая архитектурная конструкция в сфере проектирования программного обеспечения, предлагающая

Итератор

Итератор (от англ. iterator ― перечислитель) — интерфейс, предоставляющий доступ к элементам коллекции (массива или контейнера) и навигацию по ним. В различных

Компоновщик (шаблон проектирования)

$iterator = $this->components->getIterator(); while ($iterator->valid()) { $component = $iterator->current(); $component->operation1(); $iterator->next();

Поведенческие шаблоны проектирования

responsibilily) Команда (Command) Интерпретатор (Interpreter) Итератор (Iterator) Посредник (Mediator) Хранитель (Memento) Null Object Наблюдатель (Observer)

Model-View-ViewModel

JET Ext JS SwiftUI Jetpack Compose Introduction to Model/View/ViewModel pattern for building WPF apps . Дата обращения: 13 ноября 2010. Архивировано 12

Каннингем, Уорд

Федеральной комиссией по связи США. Его позывной сигнал — K9OX. Portland Pattern Repository . Дата обращения: 29 марта 2011. Архивировано 22 февраля 2011

Хранитель (шаблон проектирования)

code demonstrates the Memento pattern which temporary saves and restores another object's internal state. // Memento pattern -- Structural example using

Шаблон делегирования

toA() { i = new A(); } public void toB() { i = new B(); } } class DelegatePattern { static void Main( string[] args ) { C c = new C(); c.f(); c.g(); c.toB();