Java Reference
In-Depth Information
4.17.5
Einsatzgebiete
Der Einsatz des Iterator-Musters ist immer dann sinnvoll, wenn ein einheitlicher Zugriff
auf Datenstrukturen mit verschiedenen Typen wie Arrays, Bäume oder Listen zur Ver-
fügung gestellt werden soll.
Iteratoren können auf rekursiven Datenstrukturen, die durch das
Kompositum-Muster
erzeugt wurden, zum Einsatz kommen.
Mit einem Iterator kann die Objektstruktur des
Besucher-Musters
durchlaufen wer-
den.
Die Datenstrukturen, die von der Standard Template Library (STL) von C++ zur Ver-
fügung gestellt werden oder als Collections in der Java Bibliothek
java.util
imple-
mentiert sind, bieten Iteratoren an, mit deren Hilfe die Datenstrukturen durchlaufen
werden können.
Iteratoren in Java
Das Iterator-Muster, das von Java unterstützt wird, soll im Folgenden kurz skizziert
werden, da dessen Möglichkeiten über den bisher im Kapitel vorgestellten Mechanis-
mus hinausgehen (siehe dazu auch Kapitel 18 in [Hei10]).
Betrachtet man sich das Interface
IIterator
im Klassendiagramm Bild 4-56 ge-
nauer, so stellt man fest, dass es den Typ
Element
benutzt. Dieses Interface muss
also für jeden Elementtyp neu definiert werden. In Java werden stattdessen die Mög-
lichkeiten der generischen Programmierung (im Englischen kurz mit
Generics
be-
zeichnet) eingesetzt. Die Bibliothek
java.util
enthält das Interface
Iterator<E>
,
das bis auf den generischen Typparameter ein ähnliches Aussehen wie das hier im
Buch vorgestellte Interface
IIterator
hat und die Methoden
next()
und
has-
Next()
definiert.
Dieses Interface
Iterator<E>
könnte man auch beim vorhergehenden Programm-
beispiel nutzen und in der Klasse
MitarbeiterArray
den Iterator wie folgt erzeu-
gen:
public Iterator<Mitarbeiter> erzeugeIterator()
{
return new MitarbeiterIterator(data, index);
}
Die Klasse
MitarbeiterIterator
muss nun natürlich das Interface
Iterator-
<Mitarbeiter>
implementieren
69
. Weiterhin muss die Nutzung des erzeugten
Iterators in der Klasse
TestClient
leicht angepasst werden:
Iterator<Mitarbeiter> iter = maListe.erzeugeIterator();
69
Da das Interface
Iterator<E>
eine Methode
remove()
definiert, muss die Klasse
Mitarbeiter-
Iterator
noch um eine leere Methode
remove()
ergänzt werden, damit das modifizierte Beispiel
lauffähig wird. Der vollständige Quellcode des modifizierten Beispiels ist auf dem begleitenden Web-
auftritt zu finden.
Search WWH ::
Custom Search