迭代器模式

迭代器模式

我們在日常的開發(fā)中,特別是在使用集合的過程中都或多或少使用了迭代器來對集合進行遍歷。這時候我們就會思考一個問題,明明簡單的For循環(huán)就能解決的集合遍歷問題,我們非得創(chuàng)造一個迭代器來進行集合的遍歷,使用迭代器來遍歷到底有什么不一樣的地方嗎?本著‘存在即合理’的原則,我們通過手寫迭代器的方式來深入了解一下迭代器模式的實現(xiàn)和帶來的編碼好處。

實現(xiàn)案例

有一個書架,我們想要知道這個書架里面堆了哪些書籍,這時候我們就需要對書架里面的書一本一本的遍歷,直到沒有書本,我們就能清楚的知道數(shù)據(jù)上堆滿了哪些書籍。

  • 可以被遍歷的標記(生成迭代器的接口)
    首先提供一個接口,來標明這個類是可以被遍歷的集合。實現(xiàn)這個接口的類可以生成對應的迭代器。
public interface Aggregate{
    public abstract Iterator iterator();
}
  • 迭代器接口
    迭代器的抽象接口,定義了兩個方法
    (1)是否還有下一個元素
    (2)返回下一個元素
public interface Iterator{
    public abstract boolean hasNext();
    public abstract Object next();
}
  • 集合存儲的元素(書本)
public class book{
    private String name;
}
  • 迭代器實現(xiàn)類
public class BookShelfIterator{
    private BookShelf bookShelf;
    //指向當前遍歷的位置
    private int index;
    ...
    public boolean hasNext(){
        //將當前的index與集合的大小做比較,小于集合大小,說明還有元素。
        if(index < bookShelf.length){
            return true;
        }else{
            return false;
        }
    }

    public Object next(){
        Book book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}
  • 書架類
    書架類用于存放書本,可以用來遍歷,因此需要實現(xiàn)Aggregate接口
public class BookShelf implements Aggregate{
    ...
    public Iterator iterator(){
        //生成對應的迭代器
        return new BookShelfIterator();
    }
}
  • 測試方法
Iterator it = bookShelf.iterator();
while(it.hasNext){
    Book book = (Book)it.next();
}

由此,我們就自定義實現(xiàn)了一個迭代器,可以滿足集合遍歷的基本需求

迭代器模式的幾點思考

為什么要使用迭代模式

遍歷與實現(xiàn)分開,無論BookShelf是怎樣的實現(xiàn),只要能夠獲取到對應的迭代器,遍歷方式都是不會變的,利于代碼的擴展。

Iterator it = bookShelf.iterator();
while(it.hasNext){
    Book book = (Book)it.next();
}

多種迭代器

迭代器實現(xiàn)了遍歷集合的方式,那么我們可以設計多種不一樣的迭代器。

  • 從后向前遍歷
  • 跳躍性遍歷
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 迭代器模式定義 迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內...
    Doooook閱讀 305評論 0 0
  • 迭代器模式定義迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部...
    丶_62f3閱讀 153評論 2 2
  • 迭代器模式定義 迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內...
    嘟嘟碰碰叮叮當當閱讀 19,488評論 2 9
  • 迭代器模式(Iterator)用于在數(shù)據(jù)集合中按照順序遍歷集合,在遍歷的同時不需要暴露對象的內部表示,根據(jù)不同的需...
    Code4Android閱讀 446評論 0 3
  • 迭代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。 迭代器模式讓我們能游走于聚合內的...
    jiahzhon閱讀 191評論 0 0

友情鏈接更多精彩內容