23 дизайнерские шаблоны, глава 14: Итератор Java
Определение: предоставляет метод доступа к различным элементам в объекте контейнера без обнаружения внутренних деталей объекта.
Тип: поведенческий паттерн
Классовая диаграмма:
Если вы хотите спросить наиболее часто используемый режим в Java, ответ не является режимом Singleton, ни режим завода, ни режим стратегии, а режим итератора. Давайте сначала посмотрим на кусок кода:
public static void print (collection coll) {iterator it = coll.iterator (); while (it.hasnext ()) {string str = (string) it.next (); System.out.println (str); }}Функция этого метода состоит в том, чтобы распечатать петлю сбора строк, а шаблон итератора используется в шаблоне итератора. Язык Java полностью реализовал шаблон итератора. Итератор, переведенный на китайский, означает итератор. Когда дело доходит до итераторов, во -первых, это связано с наборами. Наборы также называются агрегатами, контейнерами и т. Д. Мы можем рассматривать наборы как контейнеры, которые могут содержать объекты. Например, список, наборы, карту и даже массивы можно назвать наборами. Функция итераторов состоит в том, чтобы пересекать объекты в контейнере один за другим.
Структура итераторного рисунка
Аннотация контейнер: обычно предоставляется метод итератора (), такой как интерфейс сбора, интерфейс списка, установленная интерфейс и т. Д. В Java.
Конкретный контейнер: это конкретный класс реализации абстрактных контейнеров, такой как упорядоченный список интерфейса списка для реализации ArrayList, связанный список интерфейса списка для реализации Linklist, хэш -список установленного интерфейса для реализации хэшса и т. Д.
Аннотация Итератор: Определите метод, необходимый для прохождения элементов. Вообще говоря, существует три метода: получите первый метод первого () первого элемента, получите следующий () метод следующего элемента, определите, является ли метод окончания обходов () (или hasnext ()), удалить () текущего объекта,
Реализация итератора: реализует методы, определенные в интерфейсе итератора для завершения итерации коллекции.
Реализация кода
Итератор интерфейса {public overse letle (); Общественный логический Hasnext (); } класс ConcretIterator реализует iterator {private list list = new ArrayList (); private int cursor = 0; public concreteTerator (список списков) {this.list = list; } public boolean hasNext () {if (cursor == list.size ()) {return false; } вернуть true; } public Object Next () {Object obj = null; if (this.hasnext ()) {obj = this.list.get (cursor ++); } вернуть obj; }} интерфейс агрегат {public void add (Object obj); public void удалить (объект obj); публичный итератор итератор (); } класс ConceteAggate реализует агрегат {private list list = new ArrayList (); public void add (Object obj) {list.add (obj); } public iterator iterator () {return new ConceteTerator (List); } public void remove (Object obj) {list.remove (obj); / Ag.Add ("Xiaoming"); Ag.Add ("xiaohong"); Ag.Add ("xiaogang"); Итератор IT = ag.iterator (); while (it.hasnext ()) {string str = (string) it.next (); System.out.println (str); }}} В приведенном выше коде агрегат - это интерфейс класса контейнеров. Вы можете представить себе сбор, список, набор и т. Д. Агрегат - это их упрощенная версия. В интерфейсе класса контейнера есть три основных метода: добавить метод объекта, удалить метод объекта, удалить и получить итератор итератор. Итератор - это интерфейс итератора, который имеет два основных метода: получить метод итеративного объекта затем и определить, является ли идентифицировать метод Hasnext. Вы можете сравнить два интерфейса java.util.list и java.util.iterator, чтобы подумать об этом самостоятельно.
Преимущества режима итератора:
Метод обхода был упрощен, и все еще довольно трудно пройти сборы объектов. Для массивов или упорядоченных списков мы все еще можем получить их через курсоры, но пользователи должны самостоятельно пересекать объекты в предпосылке, что они имеют четкое понимание коллекции. Тем не менее, для хэш -таблицы более трудно пересечь пользователя. После введения метода итератора пользователям гораздо проще использовать.
Существует много способов пересечения, например, для упорядоченных списков, мы можем предоставить два итератора положительного порядка и обхода обратного порядка в соответствии с потребностями. Пользователям нужно только получить итератор, который мы реализовали, чтобы легко пройти коллекцию.
Инкапсуляция хороша, и пользователям нужно только посетить итератор, но им не нужно беспокоиться об алгоритмах обхода.
Недостатки рисунка итератора:
Для простых отслеживания (таких как массивы или упорядоченные списки) более громоздко использовать итераторы, и каждый может почувствовать, что, как и ArrayList, мы бы предпочли использовать для петли и получить методы для прохождения коллекции.
Применимые сценарии для режима итератора
Образец итератора симбиотический и смерть с коллекцией. Вообще говоря, до тех пор, пока мы внедряем коллекцию, нам нужно одновременно предоставить итератор коллекции, точно так же, как коллекция, список, набор, карта и т. Д. В Java эти коллекции имеют свои собственные итераторы. Если мы хотим реализовать такой новый контейнер, конечно, нам также необходимо ввести шаблон итератора для реализации итератора для нашего контейнера.
Однако, поскольку взаимосвязь между контейнерами и итераторами слишком близко, большинство языков предоставляют итераторы при внедрении контейнеров, а контейнеры и итераторы, предоставленные этими языками, могут удовлетворить наши потребности в большинстве случаев. Следовательно, относительно редко практиковать итераторную схему сами. Нам нужно только использовать существующие контейнеры и итераторы на языке.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.