modus berulang
Modus berulang (Iterator Pola) Java dan .Net lingkungan pemrograman adalah pola desain yang sangat umum. Mode ini digunakan untuk elemen akses sekuensial dari koleksi benda-benda, koleksi benda-benda tidak perlu mengetahui representasi yang mendasari.
pola Iterator milik pola perilaku.
pengenalan
Maksud: Menyediakan cara untuk mengakses obyek di setiap elemen dari polimerisasi, tetapi tidak perlu untuk mengekspos bagian dari objek.
Terutama untuk mengatasi: cara yang berbeda untuk melintasi seluruh objek integrasi.
Kapan menggunakan: melintasi objek polimer.
Cara untuk memperbaiki: berjalan antara unsur-unsur dari tanggung jawab untuk iterator bukan objek agregat.
Kode kunci: mendefinisikan antarmuka: hasNext, berikutnya.
contoh aplikasi: JAWA di iterator.
Keuntungan: 1, yang mendukung dengan cara yang berbeda untuk melintasi obyek agregat.2, menyederhanakan kelas polimerisasi iterator. 3, di polimerisasi yang sama dapat memiliki beberapa traversal. 4, dalam mode berulang, menambahkan kelas baru dari kelas iterator polimer dan mudah, tanpa memodifikasi kode asli.
Kekurangan: Karena pemisahan tugas iterator penyimpanan data pola dan data melintasi, menambahkan kelas gabungan baru membutuhkan peningkatan yang sesuai dalam kelas iterator baru, jumlah pasangan Kelas meningkat, yang meningkatkan kompleksitas sistem sampai batas tertentu.
skenario penggunaan: 1, akses ke objek konten polimer tanpa harus mengekspos representasi internal.2, kebutuhan untuk menyediakan berbagai metode objek traversal agregat. 3 untuk melintasi struktur agregat yang berbeda menyediakan antarmuka yang seragam.
Catatan: Modus berulang dipisahkan perilaku traversal dari koleksi benda-benda, abstrak kelas iterator untuk bertanggung jawab, sehingga keduanya dapat dilakukan tanpa paparan struktur internal koleksi, tetapi juga membiarkan akses transparan kode eksternal untuk pengumpulan data internal.
realisasi
Kami akan membuat antarmuka narasiIteratordan metode navigasi Mengembalikan iterator dari antarmukaKontainer.kelas entitasKontainermengimplementasikan antarmuka akan bertanggung jawab untukmengimplementasikanantarmukaIterator.
IteratorPatternDemo,kelas demonstrasi kami menggunakan kelas entitas untuk mencetakNamesRepositoryNamesRepository disimpan sebagai koleksiNama.
Langkah 1
Buat sebuah antarmuka.
Iterator.java
antarmuka publik Iterator { publik hasNext boolean (); Obyek publik berikutnya (); }
Container.java
antarmuka publik Kontainer { publik Iterator getIterator (); }
Langkah 2
Buat entitas kelasContainermengimplementasikan antarmuka. Kelas ini telah menyadari kelas internal yangNameIteratorIterator antarmuka.
NameRepository.java
public class NameRepository mengimplementasikan Kontainer { nama public String [] = { "Robert", "John", "Julie", "Lora"}; @ Override publik Iterator getIterator () { kembali NameIterator baru (); } kelas privat NameIterator mengimplementasikan Iterator { int index; @ Override publik hasNext boolean () { if (index <names.length) { kembali benar; } return false; } @ Override Obyek publik berikutnya () { jika (this.hasNext ()) { kembali nama [index ++]; } kembali null; } } }
Langkah 3
GunakanNameRepositoryuntuk mendapatkan iterator, dan mencetak nama-nama.
IteratorPatternDemo.java
public class IteratorPatternDemo { public static void main (String [] args) { NameRepository namesRepository = baru NameRepository (); untuk (Iterator iter = namesRepository.getIterator (); iter.hasNext ();) { Nama String = (String) iter.next (); System.out.println ( "Nama:" + nama); } } }
Langkah 4
Verifikasi output.
Nama: Robert Nama: John Nama: Julie Nama: Lora