Mode Iterator, juga dikenal sebagai mode kursor. Definisi yang diberikan oleh GOF adalah memberikan metode untuk mengakses berbagai elemen dalam objek kontainer tanpa mengekspos detail internal objek.
Pola iterator terdiri dari peran berikut:
Peran Iterator: Peran Iterator bertanggung jawab untuk mendefinisikan antarmuka untuk mengakses dan melintasi elemen.
Peran Iterator Beton: Peran iterator spesifik perlu mengimplementasikan antarmuka Iterator dan mencatat lokasi saat ini dalam traversal.
Wadah: Peran wadah bertanggung jawab untuk menyediakan antarmuka untuk membuat peran iterator tertentu.
Wadah Beton: Peran wadah spesifik mengimplementasikan antarmuka untuk membuat peran iterator spesifik. Peran iterator khusus ini terkait dengan struktur wadah.
Contoh Implementasi Java
Diagram kelas:
Kode:
/ ** * Antarmuka koleksi khusus, mirip dengan java.util.collection * untuk penyimpanan data * @author stone * */ antarmuka publik Icollection <T> {iiterator <T> iterator (); // Kembalikan Iterator Void Add (T T); T dapat (indeks int); } / ** * Antarmuka Iterator Kustom mirip dengan java.util.iterator * Data yang digunakan untuk melintasi kelas koleksi Icollection * @author Stone * */ Public Interface iiterator <T> {boolean hasnext (); boolean hasprevious (); T next (); T sebelumnya (); } / ** * Kelas koleksi, bergantung pada myiterator * @author stone */ kelas publik mycollection <t> mengimplementasikan icollection <t> {private t [] arys; indeks int pribadi = -1; Kapasitas int pribadi = 5; MyCollection publik () {this.arys = (t []) objek baru [kapasitas]; } @Override public iiterator <T> iterator () {return new Myiterator <T> (this); } @Override public void add (t t) {index ++; if (index == kapasitas) {kapasitas *= 2; this.arys = arrays.copyof (arys, kapasitas); } this.arys [index] = t; } @Override public t get (int index) {return this.arys [index]; }} /* * If there is a new storage structure, you can new ICollection, corresponding to new IIterator to implement its traversal*/ @SuppressWarnings({"rawtypes", "unchecked"}) public class Test { public static void main(String[] args) { ICollection<Integer> collection = new MyCollection<Integer>(); Tambahkan (koleksi, 3, 5, 8, 12, 3, 3, 5); untuk (iiterator <Integer> iterator = collection.iterator (); iterator.hasnext ();) {System.out.println (iterator.next ()); } System.out.println ("-------------------------"); Icollection collection2 = myCollection baru (); Tambahkan (Collection2, "A", "B", "C", 3, 8, 12, 3, 5); untuk (iiterator iterator = collection2.iterator (); iterator.hasnext ();) {System.out.println (iterator.next ()); }} static <T> void add (icollection <T> c, t ... a) {for (t i: a) {c.add (i); }}}}Mencetak:
3 5 8 12 3 3 5 ------------------ ABC 3 8 12 3 5