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


Beschreibung

Um das Iterator-Pattern besser zu veranschaulichen, werden wir es an einem konkreten Anwendungsfall erläutern: Zu Traversieren ist eine einfach verkettete Liste von der Klasse list, die Unterklasse einer abstrakten Klasse aliste ist. aliste ist also unsere Schnittstelle, in der für alle ev. noch später zu implementierenden Listen, die Methoden definiert werden, die in all diesen Unterklassen gelten, jedoch unterschiedlich implementiert sind (sollten).

Diese Methoden für das Arbeiten mit der Liste sind z.B.: 

  • anzahl() - für Ermittlung der Anzahl der Listenelemente;
  • add() - für das Einfügen eines Elementes in eine schon vorhandene Liste; 
  • dump() - für das Traversieren und sequenzielle Ausgabe der gesamten Liste.

Um jetzt noch für eine Liste einen Iterator zu erzeugen, wir in der Schnittstelle aliste eine Operation erzeugeIterator() definiert. Diese Operation erzeugt einen neuen Iterator und übergibt eine Referenz auf die zu traversierende Liste, also auf das erste Listenelement welches Daten und eine Referenz auf des nächste Listenelement beinhaltet.

 Abb. 1: Das Iterator Design Pattern


Der neu erzeugte Iterator l_iterat ist Unterklasse der abstrakten Klasse Iterator. In dieser Klasse werden folgende abstrakte Operationen vordefiniert:

  • start() - setzt das aktuelle Element auf das erste Element;
  • weiter() - setzt das aktuelle element auf das nächste element in der Liste;
  • isFertig() - prüft, ob wir bereits das letzte Elemente der Liste traversiert wurde;
  • aktuellesElement() - gibt das aktuelle Element der Liste zurück.

Wenn man jetzt das ListenIterator-Exemplar hat, kann man nacheinander auf die Elemente des zusammengesetzten Objektes zugreifen. Wie bereits erwähnt, ermöglicht uns die Trennung vom Traversierungsmechanismen das Definieren von verschiedenen Iteratoren für unterschiedliche Traversierungsarten.


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