Рубрики
Без рубрики

Шаблон итератора

Предоставить способ последовательного доступа к элементам агрегированного объекта, не раскрывая его нижнюю часть… Помечено шаблонами проектирования, java, pattern, behavioral.

Предоставить способ последовательного доступа к элементам агрегированного объекта, не раскрывая его базовое представление.

  • Итератор: определяет интерфейс для доступа и обхода элементов.
  • ConcreteIterator: реализует интерфейс итератора. Отслеживает текущую позицию при обходе агрегата.
  • Агрегат: определяет интерфейс для создания объекта итератора
  • ConcreteAggregate: реализует интерфейс создания итератора для возврата экземпляра соответствующего ConcreteIterator
public class Main {

    public static void main(String[] args) {
        String items[] = { "Item A", "Item B", "Item C", "Item D" };
        Aggregate aggregate = new ConcreteAggregate(items);
        for (Iterator iter = aggregate.getIterator(); iter.hasNext();) {
            String item = (String) iter.next();
            System.out.println(item);
        }
    }
}

public interface Aggregate {
     Iterator getIterator();
}

public class ConcreteAggregate implements Aggregate {
    private String items[];

    public ConcreteAggregate(String[] items) {
        this.items = items;
    }

    @Override
    public Iterator getIterator() {
        return new ConcreteIterator(items);
    }
}

public interface Iterator {
    public boolean hasNext();
    public Object next();
}

public class ConcreteIterator implements Iterator {

    private String items[];
    private int index;

    public ConcreteIterator(String[] items) {
        this.items = items;
    }

    @Override
    public boolean hasNext() {
        if (index < items.length) {
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        if (this.hasNext()) {
            return items[index++];
        }
        return null;
    }
}
Item A
Item B
Item C
Item D

eidherjulian61/дизайн-шаблоны

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

ид ・ 27 сентября ・ 1 минута чтения

Оригинал: “https://dev.to/eidher/iterator-pattern-497a”