Iterator jest operacyjnym wzorcem projektowym, którym zapewnia metodę dostępu sekwencyjnego do elementów obiektu zagregowanego bez ujawniania jego reprezentacji wewnętrznej.
Obecnie od czasu java 5 i pojawieniu się typów generycznych wzorzec iteratora stracił na wadze. Typy generyczne pełnią kontrolę nad zwracanymi obiektami. Każda kolekcja też, posiada metodę iterator, która zwraca jej iterator. Jeżeli chcemy więc użyć własnego, najlepiej w tym celu udekorować kolekcję, dodając funkcjonalności do iteratora.
Przykład iteratora:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public interface Iterator { public boolean hasNext(); public Object next(); } public interface Containter { public Iterator getIterator(); } class BooksCollection implements Containter { private String titles[] = {"Design Patterns","1","2","3","4"}; public Iterator getIterator() { BookIterator result = new BookIterator(); return result; } private class BookIterator implements Iterator { private int position; public boolean hasNext() { if (position < titles.length) return true; else return false; } public Object next() { if (this.hasNext()) return titles[position++]; else return null; } } } |
Diagram wzorca: