迭代子模式

壹頁書發表於2017-03-22
http://www.cnblogs.com/java-my-life/archive/2012/05/22/2511506.html



  1. class MainClass {  
  2.     public void operation() {  
  3.         Object[] objArray = { "One""Two""Three""Four""Five""Six" };  
  4.         // 建立聚合物件  
  5.         Aggregate agg = new ConcreteAggregate(objArray);  
  6.         // 迴圈輸出聚合物件中的值  
  7.         Iterator it = agg.createIterator();  
  8.         while (!it.isDone()) {  
  9.             System.out.println(it.currentItem());  
  10.             it.next();  
  11.         }  
  12.     }  
  13.   
  14.     public static void main(String[] args) {  
  15.   
  16.         MainClass client = new MainClass();  
  17.         client.operation();  
  18.     }  
  19.   
  20. }  
  21.   
  22. abstract class Aggregate {  
  23.     /** 
  24.      * 工廠方法,建立相應迭代子物件的介面 
  25.      */  
  26.     public abstract Iterator createIterator();  
  27. }  
  28.   
  29. class ConcreteAggregate extends Aggregate {  
  30.   
  31.     private Object[] objArray = null;  
  32.   
  33.     /** 
  34.      * 構造方法,傳入聚合物件的具體內容 
  35.      */  
  36.     public ConcreteAggregate(Object[] objArray) {  
  37.         this.objArray = objArray;  
  38.     }  
  39.   
  40.     @Override  
  41.     public Iterator createIterator() {  
  42.   
  43.         return new ConcreteIterator(this);  
  44.     }  
  45.   
  46.     /** 
  47.      * 取值方法:向外界提供聚集元素 
  48.      */  
  49.     public Object getElement(int index) {  
  50.   
  51.         if (index < objArray.length) {  
  52.             return objArray[index];  
  53.         } else {  
  54.             return null;  
  55.         }  
  56.     }  
  57.   
  58.     /** 
  59.      * 取值方法:向外界提供聚集的大小 
  60.      */  
  61.     public int size() {  
  62.         return objArray.length;  
  63.     }  
  64. }  
  65.   
  66. interface Iterator {  
  67.     /** 
  68.      * 迭代方法:移動到第一個元素 
  69.      */  
  70.     public void first();  
  71.   
  72.     /** 
  73.      * 迭代方法:移動到下一個元素 
  74.      */  
  75.     public void next();  
  76.   
  77.     /** 
  78.      * 迭代方法:是否為最後一個元素 
  79.      */  
  80.     public boolean isDone();  
  81.   
  82.     /** 
  83.      * 迭代方法:返還當前元素 
  84.      */  
  85.     public Object currentItem();  
  86. }  
  87.   
  88. class ConcreteIterator implements Iterator {  
  89.     // 持有被迭代的具體的聚合物件  
  90.     private ConcreteAggregate agg;  
  91.     // 內部索引,記錄當前迭代到的索引位置  
  92.     private int index = 0;  
  93.     // 記錄當前聚集物件的大小  
  94.     private int size = 0;  
  95.   
  96.     public ConcreteIterator(ConcreteAggregate agg) {  
  97.         this.agg = agg;  
  98.         this.size = agg.size();  
  99.         index = 0;  
  100.     }  
  101.   
  102.     /** 
  103.      * 迭代方法:返還當前元素 
  104.      */  
  105.     @Override  
  106.     public Object currentItem() {  
  107.         return agg.getElement(index);  
  108.     }  
  109.   
  110.     /** 
  111.      * 迭代方法:移動到第一個元素 
  112.      */  
  113.     @Override  
  114.     public void first() {  
  115.   
  116.         index = 0;  
  117.     }  
  118.   
  119.     /** 
  120.      * 迭代方法:是否為最後一個元素 
  121.      */  
  122.     @Override  
  123.     public boolean isDone() {  
  124.         return (index >= size);  
  125.     }  
  126.   
  127.     /** 
  128.      * 迭代方法:移動到下一個元素 
  129.      */  
  130.     @Override  
  131.     public void next() {  
  132.   
  133.         if (index < size) {  
  134.             index++;  
  135.         }  
  136.     }  
  137.   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2135811/,如需轉載,請註明出處,否則將追究法律責任。

相關文章