Шаблон итератора — это очень часто используемый шаблон проектирования в среде программирования Java и .Net. Этот шаблон используется для последовательного доступа к элементам объекта коллекции без необходимости знать его базовое представление.
Шаблон итератора подпадает под категорию поведенческих шаблонов.
Реализация
Мы собираемся создать интерфейс Iterator, который описывает метод навигации, и интерфейс Container, который перезапускает итератор. Конкретные классы, реализующие интерфейс Контейнера, будут ответственны за реализацию интерфейса Итератора и его использование.
IteratorPatternDemo , наш демонстрационный класс будет использовать NamesRepository , конкретную реализацию класса для печати Имен, хранящихся в виде коллекции в NamesRepository .
Шаг 1
Создавайте интерфейсы.
Iterator.java
public interface Iterator { public boolean hasNext(); public Object next(); }
Container.java
public interface Container { public Iterator getIterator(); }
Шаг 2
Создайте конкретный класс, реализующий интерфейс Контейнера . Этот класс имеет внутренний класс NameIterator, реализующий интерфейс Iterator .
NameRepository.java
public class NameRepository implements Container { public String names[] = {"Robert" , "John" ,"Julie" , "Lora"}; @Override public Iterator getIterator() { return new NameIterator(); } private class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if(index < names.length){ return true; } return false; } @Override public Object next() { if(this.hasNext()){ return names[index++]; } return null; } } }
Шаг 3
Используйте NameRepository, чтобы получить итератор и вывести имена.
IteratorPatternDemo.java
public class IteratorPatternDemo { public static void main(String[] args) { NameRepository namesRepository = new NameRepository(); for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){ String name = (String)iter.next(); System.out.println("Name : " + name); } } }
Шаг 4
Проверьте вывод.