23 Pola Desain, Bab 14: Pola Java Iterator
Definisi: Menyediakan metode untuk mengakses berbagai elemen dalam objek kontainer tanpa mengekspos detail internal objek.
Jenis: Pola perilaku
Diagram kelas:
Jika Anda ingin menanyakan mode yang paling umum digunakan di Java, jawabannya bukanlah mode singleton, atau mode pabrik, atau mode strategi, tetapi mode iterator. Mari kita lihat sepotong kode terlebih dahulu:
public static void print (collection coll) {iterator it = coll.iterator (); while (it.hasnext ()) {string str = (string) it.next (); System.out.println (str); }}Fungsi metode ini adalah mencetak loop pengumpulan string, dan pola iterator digunakan dalam pola iterator. Bahasa Java telah sepenuhnya menerapkan pola iterator. Iterator diterjemahkan ke dalam bahasa Cina berarti iterator. Ketika datang ke iterator, pertama -tama, itu terkait dengan set. Set juga disebut agregat, wadah, dll. Kita dapat menganggap set sebagai wadah yang dapat berisi objek. Misalnya, daftar, set, peta, dan bahkan array dapat disebut set. Fungsi iterator adalah untuk melintasi objek dalam wadah satu per satu.
Struktur pola iterator
Metode Abstrak: Umumnya, Iterator () disediakan, seperti antarmuka koleksi, antarmuka daftar, set antarmuka, dll. Di Java.
Kontainer Khusus: Ini adalah kelas implementasi konkret dari kontainer abstrak, seperti daftar antarmuka daftar yang dipesan untuk mengimplementasikan daftar array, daftar antarmuka daftar yang ditautkan untuk mengimplementasikan LinkList, daftar hash antarmuka yang ditetapkan untuk mengimplementasikan hashset, dll.
Abstrak Iterator: Tentukan metode yang diperlukan untuk melintasi elemen. Secara umum, ada tiga metode: dapatkan metode pertama () dari elemen pertama, dapatkan metode berikutnya () dari elemen berikutnya, tentukan apakah metode traversal ujung isdone () (atau hasnext ()), lepaskan () dari objek saat ini,
Implementasi Iterator: Mengimplementasikan metode yang ditentukan dalam antarmuka Iterator untuk menyelesaikan iterasi koleksi.
Implementasi Kode
antarmuka iterator {objek publik next (); hasnext boolean publik (); } class concreeteIterator mengimplementasikan iterator {private list list = new arraylist (); private int kursor = 0; public concreeteIterator (daftar daftar) {this.list = list; } public boolean hasnext () {if (cursor == list.size ()) {return false; } return true; } objek publik next () {objek obj = null; if (this.hasnext ()) {obj = this.list.get (kursor ++); } kembalikan obj; }} antarmuka agregat {public void add (objek obj); public void hapus (objek obj); Iterator Publik Iterator (); } class ConcreteAggRegate mengimplementasikan agregat {daftar private list = new arraylist (); public void add (objek obj) {list.add (obj); } public iterator iterator () {return new ConcreeteIterator (daftar); } public void hapus (objek obj) {list.remove (obj); }} klien kelas publik {public static void main (string [] args) {agregate ag = new ConcreteAggRegate (); ag.add ("xiaoming"); ag.add ("xiaohong"); AG.Add ("Xiaogang"); Iterator it = ag.iterator (); while (it.hasnext ()) {string str = (string) it.next (); System.out.println (str); }}} Dalam kode di atas, agregat adalah antarmuka kelas kontainer. Anda dapat membayangkan koleksi, daftar, set, dll. Agregat adalah versi yang disederhanakan. Ada tiga metode utama dalam antarmuka kelas kontainer: Tambahkan metode objek Tambah, hapus metode objek Hapus, dan dapatkan Iterator Metode Iterator. Iterator adalah antarmuka iterator, yang memiliki dua metode utama: dapatkan metode objek iteratif selanjutnya, dan tentukan apakah untuk mengulangi metode HasNext. Anda dapat membandingkan dua antarmuka java.util.list dan java.util.iterator untuk memikirkannya sendiri.
Keuntungan dari Mode Iterator:
Metode traversal telah disederhanakan, dan masih cukup merepotkan untuk melintasi koleksi objek. Untuk array atau daftar yang dipesan, kami masih dapat memperolehnya melalui kursor, tetapi pengguna perlu melintasi objek sendiri di premis bahwa mereka memiliki pemahaman yang jelas tentang koleksi tersebut. Namun, untuk tabel hash, lebih merepotkan untuk melintasi pengguna. Setelah memperkenalkan metode Iterator, jauh lebih mudah untuk digunakan pengguna.
Ada banyak cara untuk melintasi, seperti untuk daftar yang dipesan, kami dapat memberikan dua iterator dengan urutan positif dan traversal urutan terbalik sesuai dengan kebutuhan. Pengguna hanya perlu mendapatkan iterator yang kami terapkan untuk dengan mudah melintasi koleksi.
Enkapsulasi itu bagus, dan pengguna hanya perlu mendapatkan iterator untuk dilintasi, tetapi mereka tidak perlu khawatir tentang algoritma traversal.
Kerugian dari pola iterator:
Untuk traversal sederhana (seperti array atau daftar yang dipesan), lebih rumit untuk menggunakan iterator, dan semua orang mungkin merasa bahwa, seperti arraylist, kami lebih suka menggunakan loop dan mendapatkan metode untuk melintasi koleksi.
Skenario yang berlaku untuk mode Iterator
Pola iterator adalah simbiotik dan kematian dengan koleksi. Secara umum, selama kami menerapkan koleksi, kami perlu memberikan iterator koleksi secara bersamaan, seperti koleksi, daftar, set, peta, dll. Di Java, koleksi ini memiliki iterator mereka sendiri. Jika kami ingin mengimplementasikan wadah baru seperti itu, tentu saja kami juga perlu memperkenalkan pola iterator untuk mengimplementasikan iterator untuk wadah kami.
Namun, karena hubungan antara wadah dan iterator terlalu dekat, sebagian besar bahasa menyediakan iterator saat menerapkan wadah, dan wadah dan iterator yang disediakan oleh bahasa -bahasa ini dapat memenuhi kebutuhan kita dalam banyak kasus. Oleh karena itu, relatif jarang untuk mempraktikkan pola iterator sendiri. Kita hanya perlu menggunakan wadah dan iterator yang ada dalam bahasa.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.