corak lelaran
Corak Iterator ialah corak reka bentuk yang sangat biasa digunakan dalam persekitaran pengaturcaraan Java dan .Net. Corak ini digunakan untuk mengakses elemen objek koleksi secara berurutan tanpa mengetahui perwakilan asas objek koleksi.
Corak lelaran ialah corak tingkah laku.
Pengenalan
Niat: Sediakan kaedah untuk mengakses setiap elemen secara berurutan dalam objek agregat tanpa mendedahkan perwakilan dalaman objek.
Penyelesaian utama: Cara berbeza untuk melintasi keseluruhan objek bersepadu.
Bila menggunakan: Melintasi objek agregat.
Cara menyelesaikannya: Berikan tanggungjawab berjalan antara elemen kepada lelaran dan bukannya objek agregat.
Kod kunci: Tentukan antara muka: hasNext, next.
Contoh aplikasi: iterator dalam JAVA.
Kelebihan: 1 Ia menyokong melintasi objek agregat dengan cara yang berbeza. 2. Iterator memudahkan kelas agregat. 3. Terdapat berbilang traversal pada agregat yang sama. 4. Dalam mod lelaran, adalah sangat mudah untuk menambah kelas agregat baharu dan kelas lelaran tanpa mengubah suai kod asal.
Kelemahan: Memandangkan corak iterator memisahkan tanggungjawab menyimpan data dan merentasi data, menambah kelas agregat baharu memerlukan penambahan kelas lelaran baharu dan bilangan kelas bertambah secara berpasangan meningkatkan kerumitan sistem pada tahap tertentu.
Senario penggunaan: 1 Akses kandungan objek agregat tanpa mendedahkan perwakilan dalamannya. 2. Ia adalah perlu untuk menyediakan pelbagai kaedah traversal untuk objek agregat. 3. Sediakan antara muka bersatu untuk merentasi struktur agregat yang berbeza.
Nota: Corak iterator memisahkan gelagat traversal objek koleksi dan mengabstrak kelas iterator untuk mengambil alih, supaya struktur dalaman koleksi tidak terdedah dan kod luaran Biarkan secara telus mengakses data di dalam koleksi.
Pelaksanaan
Kami akan mencipta antara muka Iterator yang menerangkan kaedah navigasi dan antara muka Bekas yang mengembalikan iterator. Kelas entiti yang melaksanakan antara muka Bekas akan bertanggungjawab untuk melaksanakan antara muka Iterator.
IteratorPatternDemo, kelas demo kami menggunakan kelas entiti NamesRepository untuk mencetak Names yang disimpan sebagai koleksi dalam NamesRepository.
Langkah 1
Buat antara muka.
Iterator.java
public interface Iterator { public boolean hasNext(); public Object next(); }
Container.java
public interface Container { public Iterator getIterator(); }
Langkah 2
Dicipta dan dilaksanakanBekas Kelas entiti antara muka. Kelas ini mempunyai kelas dalaman NameIterator yang melaksanakan antara muka Iterator.
NameRepository.java
public class NameRepository implements Container { public String names[] = {"Robert" , "John" ,"Julie" , "Lora"}; @Override public Iterator getIterator() { return new NameIterator(); } private class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if(index < names.length){ return true; } return false; } @Override public Object next() { if(this.hasNext()){ return names[index++]; } return null; } } }
Langkah 3
Gunakan NameRepository untuk mendapatkan iterator dan mencetak nama.
IteratorPatternDemo.java
public class IteratorPatternDemo { public static void main(String[] args) { NameRepository namesRepository = new NameRepository(); for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){ String name = (String)iter.next(); System.out.println("Name : " + name); } } }
Langkah 4
Sahkan output.
rreeee