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.

iterator_pattern_uml_diagram.jpg

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