Iterator模式定義:
          提供一個方法順序訪問一個聚合對象的各個元素,而又不暴露該對象的內部表示。
          這個模式在java的類庫中已經實現了,在java中所有的集合類都實現了Conllection接口,而Conllection接口又繼承了Iterable接口,該接口有一個iterator方法,也就是所以的集合類都可以通過這個iterator方法來轉換成Iterator類,用Iterator對象中的hasnext方法來判斷是否還有下個元素,next方法來順序獲取集合類中的對象。今天面試考到設計模式,我愣是沒答上來,我暈死,自己這幾天剛學的東西,自己也都理解,可一到考試的時候不是忘了就是回答的不準確,自己也不清楚到底是為什么,哎,傷心。。。。。。,下面是Iterator模式的結構圖:

           在這個結構圖中的Aggregate抽象類也可以定義成接口。下面給出一個例子來說明Iterator模式的使用。
          import java.util.ArrayList;

          interface Iterator<E>{
           public void first();
           public void next();
           public E currentItem();
           public boolean isDone();
          }
          class ConcreteIterator<E> implements Iterator<E>{

           private ConcreteAggregate<E> agg;
           private int index=0;
           private int size=0;

              public ConcreteIterator( ConcreteAggregate<E> aggregate) {
            this.agg=aggregate;
            this.index=0;
            this.size=aggregate.size();
           }

           public E currentItem() {
            return agg.getElement(index);
           }

           public void first() {
            index=0;
           }

           public boolean isDone() {
            if(index>=size){
             return true;
            }
            return false;
           }

           public void next() {
            if(index<size){
             index++; 
               }
           
              }
          }
          abstract class Aggregate<E>{
           
           protected abstract Iterator createIterator();
          }
          class ConcreteAggregate<E> extends Aggregate<E>{
           private ArrayList<E> arrayList=new ArrayList<E>();
           public Iterator createIterator() {
            
            return new ConcreteIterator<E>(this);
           }
           public void add(E o){
            arrayList.add(o);
           }
           public E getElement(int index) {

                 if (index<arrayList.size()) {

                   return arrayList.get(index);

                 } else {

                   return null;

                 }

              }

              public int size(){

                 return arrayList.size();

              }


          }

          public class Client {

           public static void main(String[] args) {
            ConcreteAggregate<String> aggregate=new ConcreteAggregate<String>();
            aggregate.add("A");
            aggregate.add("B");
            aggregate.add("C");
            aggregate.add("D");
            aggregate.add("E");
            Iterator iterator=aggregate.createIterator();
            for(iterator.first();!iterator.isDone();iterator.next()){
             System.out.println(iterator.currentItem());
            }
            
           }
          }
          輸出結果:
          A
          B
          C
          D
          E
          在這個例子中,我們按照Iterator模式的結構圖來創建的例子,我們創建的集合ConcreteAggregate可以存放任何類型的數據,然后使用createIterator方法轉換成Iterator對象,使用Iterator對象來按順序顯示集合中的內容。這個模式在Java的jdk中是這樣實現的,所以的集合類都實現了Iterable接口,這個接口中有一個iterator方法可以把集合類的對象轉換成Iterator類的對象。明白這個原理可以更好的理解Java中的集合類和迭代器,根據這個可以創建功能更加強大的集合類。
          小結:Iterator模式主要用在當一個集合類中的元素經常變動時,而不需要改變客戶端的代碼。

          Feedback

          # re: 設計模式學習筆記(十三)—Iterator迭代器模式  回復  更多評論   

          2012-01-16 10:14 by apiao
          支持下lz... 在你這學習很多了 繼續努力~

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 东平县| 济宁市| 贵港市| 怀宁县| 洛川县| 军事| 车险| 晋州市| 威信县| 衡东县| 慈溪市| 凤山市| 沁阳市| 侯马市| 浦北县| 通辽市| 郴州市| 观塘区| 南阳市| 台中市| 岢岚县| 张家港市| 彩票| 德清县| 桂东县| 自贡市| 基隆市| 沁源县| 宜兴市| 陵川县| 青阳县| 舒兰市| 松原市| 抚远县| 武平县| 寿阳县| 甘德县| 荥阳市| 辽宁省| 伊金霍洛旗| 河曲县|