Определение: предоставляет метод доступа к различным элементам в объекте контейнера без обнаружения внутренних деталей объекта.
Тип: поведенческий паттерн
Классовая диаграмма:
Если вы хотите спросить наиболее часто используемый режим в Java, ответ - это не режим Singleton, ни режим завода, ни режим стратегии, а в режиме итератора.
public static print (collection coll) {iterator it = coll.iterator (); Функция этого метода состоит в том, чтобы распечатать петлю сбора строк, а шаблон итератора используется в шаблоне итератора. Когда речь идет о итераторах, прежде всего, это связано с наборами, также называются агрегатами, контейнерами и т. Д. Мы можем рассматривать наборы как контейнеры, которые могут содержать.
Структура итераторного рисунка
Аннотация контейнер: обычно предоставляется метод итератора (), такой как интерфейс сбора, интерфейс списка, установленная интерфейс и т. Д. В Java.
Конкретный контейнер: это конкретный класс реализации абстрактных контейнеров, такой как упорядоченный список интерфейса списка для реализации ArrayList, связанный список интерфейса списка для реализации Linklist, хэш -список установленного интерфейса для реализации хэшса и т. Д.
Аннотация Итератор: Определите метод, необходимый для прохождения элементов.
Реализация итератора: реализует методы, определенные в интерфейсе итератора для завершения итерации коллекции.
Привести пример
Поскольку правила самого итераторного режима являются относительно свободными, конкретная реализация разнообразна. Давайте приведем только один пример, и мы не можем представить методы реализации один за другим. Поэтому, прежде чем привести пример, давайте перечислим методы реализации следующего шаблона итератора.
1 Роль итератора определяет интерфейс для обхода, но не указывает, кто контролирует итерацию. В применении сбора Java процесс обхода контролируется клиентской программой, которая называется внешним итератором; Внешние итераторы являются гибкими и мощными, чем внутренние итераторы, а внутренние итераторы очень слабы в среде Java Locale.
2 Нет никакого положения о том, кто будет реализовать алгоритм обхода в режиме итератора. Кажется естественным реализацией в роли итератора. Поскольку это удобно для различных алгоритмов обхода, которые будут использоваться в контейнере, это также удобно для применения алгоритма обхода в разные контейнеры. Но это разрушает инкапсуляцию контейнера - роль контейнера должна раскрывать свои собственные личные атрибуты, что на Java означает разоблачение собственных личных атрибутов для других классов.
Затем давайте поместим его в роль контейнера для его реализации. Таким образом, роль итератора переопределена, чтобы хранить только функцию, которая пересекает текущее местоположение. Но алгоритм обхода тесно связан с определенным контейнером.
В применении сбора Java предоставлена конкретная роль итератора - это внутренний класс, определенный в роли контейнера. Это защищает упаковку контейнера. Но в то же время контейнер также обеспечивает интерфейс алгоритма обхода, и вы можете расширить свой собственный итератор.
Хорошо, давайте посмотрим, как реализован итератор в коллекции Java.
// Роль итератора, только определяет общедоступный интерфейс интерфейса {boolean hasnext (); Это просто интерфейс, поэтому он не будет перечислен. Чтобы выделить ключевые моменты, мы ссылаемся на контент, связанный с итератором // роль конкретной итераторной роли, получена в форме внутреннего класса. AbstractList существует для извлечения общих частей каждой конкретной роли контейнера. Общедоступный класс Abstractlist ExtrableCollection Reculsings {... // Это заводской метод, ответственный за создание конкретных ролей итератора Publicator () {return new itr ();} // как конкретный итераторный публичный объект Next () { CheckforCome (); . это. Cursor--;Что касается использования режима итератора. Как указано во введении, клиентская программа должна сначала получить конкретную роль контейнера, а затем получить конкретную роль итератора с помощью конкретной роли контейнера. Таким образом, вы можете использовать конкретную роль итератора, чтобы пройти контейнер ...
Плюсы и минусы режима итератора
Преимущества режима итератора:
Метод прохождения был упрощен, и все еще довольно хлопотно, чтобы пройти сборы объектов. После введения метода итератора пользователям гораздо проще использовать.
Существует много способов пройти, например, для упорядоченных списков, мы можем предоставить два итератора положительного порядка и обхода обратного порядка в соответствии с потребностями.
Инкапсуляция хороша, и пользователям нужно только посетить итератор, но им не нужно беспокоиться об алгоритмах обхода.
Недостатки рисунка итератора:
Для простых отслеживания (таких как массивы или упорядоченные списки) более громоздко использовать итераторы, и каждый может почувствовать, что, как и ArrayList, мы бы предпочли использовать для петли и получить методы для прохождения коллекции.
Применимые сценарии для режима итератора
Образец итератора является симбиотическим и смертью с коллекцией. Если мы хотим реализовать такой новый контейнер, конечно, нам также необходимо ввести шаблон итератора для реализации итератора для нашего контейнера.
Однако, поскольку отношения между контейнерами и итераторами слишком близки, большинство языков предоставляют итераторы при внедрении контейнеров, а контейнеры и итераторы, предоставленные этими языками, могут удовлетворить наши потребности в большинстве случаев.