Entwurfsmuster Iterator Gina Puzic Entwurfsmuster Iterator bersicht Entwurfsmuster
Entwurfsmuster – Iterator Gina Puzic Entwurfsmuster Iterator
Übersicht Entwurfsmuster Aufgabe Entwurfsmuster Erzeugungsmuster klassenbasiert Gültigkeits -bereich Entwurfsmuster Iterator objektbasiert Strukturmuster Verhaltensmuster Fabrikmethode Adapter Interpreter Schablonenmethode Abstrakte Fabrik Erbauer Prototyp Singleton Adapter Brücke Dekorierer Fassade Fliegengewicht Kompositum Proxy Befehl Beobachter Besucher Iterator Momento Strategie Vermittler Zustand Zuständigkeitskette 2
Zweck Zugriffsmöglichkeit auf eine Sammlung von Daten, ohne dass die darunter liegende Datenstruktur offengelegt wird. Entwurfsmuster Iterator 3
Motivation üVerschiedene Traversierungsalgorithmen auf eine Datenstruktur (z. B. Liste) anwenden können ohne ihre Schnittstelle aufblähen zu müssen. üDie Datenstruktur zur selben Zeit mehrfach traversieren können. üDie Aggregationsklasse ändern können ohne den Klientcode ändern zu müssen. Entwurfsmuster Iterator 4
Strukturdiagramm Aggregat Erzeuge. Iterator() Iterator Start() Weiter() Ist. Fertig() Aktuelles. Element() Konkretes. Aggregat Konkreter. Iterator Erzeuge. Iterator() return new Konkreter. Iterator(this) Entwurfsmuster Iterator 5
Teilnehmer ü Iterator ü Konkreter. Iterator ü Aggregat ü Konkretes. Aggregat Entwurfsmuster Iterator 6
Beispiel: Liste Trennung des Traversierungsalgorithmus vom Listenobjekt. Liste Anzahl() Haenge. An(Element) Entferne(Element) …. . liste Listen. Iterator Start() Weiter() Ist. Fertig() Aktuelles. Elemtent() Index Entwurfsmuster Iterator 7
Beispiel: Liste Polymorphe Iteratoren (Iteration vom Klient gesteuert) Iterator Klient Aggregat Erzeuge. Iterator() Anzahl() Haenge. An(Element) Entferne(Element) … Liste Skip. Liste Entwurfsmuster Iterator Start() Weiter() Ist. Fertig() Aktuelles. Element() Listen. Iterator Skip. Listen. Iterator 8
Beispielcode public interface Iterator{ public boolean has. Next() //Liefert true, falls noch weitere Elemente //verfügbar public Object next() //Liefert das nächste Element zurück public void remove() //Löscht das zuletzt mit next() abgerufenen //Element } Entwurfsmuster Iterator 9
Beispielcode import java. util. *; public class Beispiel {… //Füllen einer Liste Array. List list=new Array. List(); for(int i=0; i<5; i++){ list. add(i); } } Entwurfsmuster Iterator 10
Beispielcode … //Löschen von Elementen mit dem Iterator it=list. iterator(); while(it. has. Next()){ String s=(String) it. next(); if(s=="abc"){ it. remove(); } } Entwurfsmuster Iterator 11
Beispielcode … //Ausgeben aller Elemente while(it. has. Next()){ System. out. println((String) it. next()); } Entwurfsmuster Iterator 12
Robustheit des Iterators Probleme beim Ändern des Aggregats während der Traversierung. ü Lösung 1: Kopieren des Aggregats zu teuer ü Lösung 2: Einen robusten Iterator verwenden z. B. Benutzung des Observer Patterns Entwurfsmuster Iterator 13
Umsetzung mit Observer Aggregat = Subjekt Iterator = Beobachter Änderung des Aggregats: • Iterator wird benachrichtigt • die update-Methode wird aufgerufen Entwurfsmuster Iterator 14
Literaturverzeichnis Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Entwurfsmuster Iterator 15
- Slides: 15