Als letzte Gruppe von Entwurfsmustern gibt es noch die Verhaltensmuster. Verhaltensmuster beschreiben, wie eine gegebene Funktionalität auf Verantwortlichkeiten unterschiedlicher Klassen bzw. ihrer Instanzen abgebildet werden kann.
Zusätzlich zu den in Strukturmustern dargestellten reinen Klassen- bzw. Objektstrukturen beschreiben Verhaltensmuster insbesondere auch den Nachrichtenaustausch innerhalb solcher Strukturen.
Es wird der Iterator als einer der Verhaltensmuster vorgestellt.
Stellt den Zugriff auf die einzelnen Elemente einer Struktur zur Verfügung, ohne die Implementierung der Struktur offenzulegen.
Ein Behälterobjekt (container), wie z. B. eine Liste, sollte Operationen zum Zugriff auf ihre Elemente zur Verfügung stellen, ohne dass die interne Implementierung sichtbar wird. Es kann sein, dass die Liste auf unterschiedliche Weisen durchlaufen werden soll (z. B. vorwärts und rückwärts), oder dass mehrere Durchläufe parallel stattfinden müssen.
Das Iterator-Muster ermöglicht dies, indem die Verantwortung für den Zugriff und das Durchlaufen des Behälters aus dem Behälterobjekt in ein sog. Iteratorobjekt verschoben wird. Das Iteratorobjekt merkt sich die aktuelle Position des Durchlaufs bzw. kennt die bereits besuchten Objekte. Der Zugriff auf das Behälterobjekt und auf das Iteratorobjekt erfolgt über Interfaces, damit die Implementierung für den Dienstnutzer
verborgen und dadurch austauschbar ist.
Da der Dienstnutzer nur auf die Interfaces Set und Iterator zugreift, bleibt für ihn sowohl die Implementierung des Sets (z. B. HashSet oder TreeSet) als auch die Implementierung des Iterators (z. B. HashIterator oder TreeIterator) verborgen.
Abbildung: Ein Beispiel eines Iterators
Man benutzt das Iterator-Muster,
Quelle
Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal Pattern-Oriented Software Architecture — A System of Patterns J. Wiley & Sons, Chichester, 1996