Zpo-7-wyk-Slajd26

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Iterator: struktura

Iterator: struktura


Wzorzec Iterator składa się z dwóch klas abstrakcyjnych: Aggregate i Iterator, oraz dwóch klas konkretnych: ConcreteAggregate i ConcreteIterator. Wszystkie kolekcje są implementacją interfejsu Aggregate, tzn. posiadają metodę tworzącą iterator. Iterator, podobnie jak Aggregate, jest jedynie specyfikacją interfejsu, jaki każdy iterator musi posiadać. Klient, odwołując się do metody createIterator () w kolekcji, otrzymuje klasę implementującą interfejs Iterator. Dzięki temu klient nie zna konkretnej klasy implementacyjnej, a jedynie interfejs, do którego musi się odwoływać. Taka sytuacja ma miejsce np. w bibliotece Java Collections: każda kolekcji tworzy swój własny iterator, który jednak jest dostępny wyłącznie poprzez wspólny interfejs Iterator. W ten sposób mogą one być traktowane w jednolity sposób.

Iterator posiada wewnętrzny wskaźnik, który wskazuje na aktualny element kolekcji. Iteratory definiują podstawowe operacje pozwalające na sekwencyjny dostęp do wszystkich elementów dowolnej kolekcji: getFirst () – ustawiająca wskaźnik iteratora na początek kolekcji, getNext () – zwracająca kolejny element, hasNext () – sprawdzająca, czy kolejny element istnieje. W niektórych implementacjach iterator pozwala także na modyfikacje kolekcji, np. dodawanie i usuwanie elementów. Kolekcje o specyficznej strukturze, np. listy mogą udostępniać iteratory wykorzystujące wiedzę o tej strukturze, np. udostępniającą możliwość swobodnego dostępu do elementów kolekcji, zmiany kierunku trawersu kolekcji etc.

Z uwagi na konieczność dostępu do elementów kolekcji, iterator musi posiadać prawo odwołania się do nich. W praktyce jest on zatem zwykle klasą zaprzyjaźnioną lub wewnętrzną kolekcji.


<< Poprzedni slajd | Spis treści | Następny slajd >>