Iterator [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Übersicht

Das Iterator - Pattern ermöglicht einen sequenziellen Zugriff auf die Elemente eines zusammengesetzten Objektes, ohne dessen Datenstruktur offenzulegen. Es nimmt die verschiedenen Arten der Traversierung aus der Klasse heraus, wodurch die Schnittstelle des zusammengesetzten Objektes nicht durch Methoden für die verschiedenen Traversierungsarten aufgebläht wird. Dies sollte selbst dann geschehen, wenn bekannt ist, welche Methoden benötigt werden. Des Weiteren sind die Traversierungsalgorithmen leichter austauschbar, da man einfach das entsprechende Iteratorobjekt auszutauschen braucht. Traversierungsarten bei einer Liste beispielsweise sind vorwärts und rückwärts, oder auch bei einem Baum das Depth-First oder Top-First Traversieren. Das Iterator-Pattern ermöglicht zudem eine mehrfach Traversierung zur gleichen Zeit.

Die zentrale Idee des Iterator-Pattern ist es, die Zuständigkeit für den Zugriff und die Funktionalitäten zur Traversierung aus den zusammengesetzten Objekt herauszunehmen und sie einem Iterator-Objekt zuzuteilen. Die Klasse Iterator ist somit eine Schnittstelle zum Zugriff auf die Elemente des zusammengesetzten Objektes. Ein Iterator-Objekt, welches Bekanntschaft von dem zu traversierenden Objekt hat, ist auch dafür zuständig, sich den aktuellen Zustand der Traversierung zu merken. Es weiß also, welche Elemente bereits traversiert wurden.

Das Iterator-Pattern folgende Struktur:

 Abb. 1: Das Iterator Design Pattern


Teilnehmer
  • Iterator
    - definiert eine Schnittstelle zum Zugriff auf und zur Traversierung von Elementen.

  • konkreterIterator
    - implementiert die Schnittstelle von Iterator.
    - verwaltet die aktuelle Position während der Traversierung des Aggregats.

  • Aggregat
    - definiert eine Schnittstelle zum Erzeugen eines Objektes der Klasse Iterator.

  • konkretesAggregat (list)
    - implementiert die Operation zum Erzeugen eines konkreten Iterators, in dem es ein Objekt der passenden KonkreterIterator-Klasse zurückgibt.

Bei einem Iterator-Patten ist es notwendig, dass:

  • Iterator und zusammengesetztes Objekt miteinander gekoppelt sind,
  • der Klient das konkrete zusammengesetzte Objekt kennen muß, welches traversiert werden soll.

Wenn ein Iterator so ausgelegt ist, dass er verschieden Datenstrukturen verarbeiten kann, dann sprechen wir von einem polymorphen Iterator.


[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.05.2005