設(shè)計(jì)模式 - 迭代器模式 - Itreator

設(shè)計(jì)模式 - 迭代器模式 - Itreator

概念

? 它提供一種方法訪問一個(gè)容器對(duì)象中的各個(gè)元素,而不需要暴露該對(duì)象的內(nèi)部細(xì)節(jié)

概念說明

  • 迭代器是為容器服務(wù)的,那么什么是容器?能夠容納對(duì)象的所有類型(Collection集合類型、Set類型等)
  • 迭代器模式就是為了解決便利這些容器中元素而誕生的

UML

迭代器模式-UML.png
  • Itreator(迭代器角色):負(fù)責(zé)定義訪問和遍歷元素的接口;JDK已定義

  • ConcreteIterator(具體迭代器角色):實(shí)現(xiàn)迭代器接口,完成容器元素遍歷;

    迭代器中刪除元素:1.刪除當(dāng)前元素;2.當(dāng)前游標(biāo)指向下一個(gè)元素

  • Iterable(獲取迭代器角色):返回一個(gè)迭代器,實(shí)現(xiàn)該接口允許對(duì)象稱為ForEarch語(yǔ)句的目標(biāo)

    (就可以通過forEarch語(yǔ)句遍歷容器)

  • ConcreateIterable(具體獲取迭代器角色):一般容器類實(shí)現(xiàn)Iterable(如AbstractList)

例子

? 迭代器實(shí)現(xiàn)

public class ArrayIterator implements Iterator<String> {
    private BookArray bookArray;
    private int index;
    public ArrayIterator(BookArray bookArray) {
        this.bookArray = bookArray;
    }
    @Override
    public boolean hasNext() {
        if (index < bookArray.size()) {
            return true;
        } else {
            return false;
        }
    }
    @Override
    public String next() {
        return bookArray.getBook(index++);
    }
    @Override
    public void remove() {
        // TODO Auto-generated method stub
    }
}

? 容器實(shí)現(xiàn)

public class BookArray implements Iterable<String>{
    private String[] books;
    private int index;
    public BookArray(int arraySize) {
        books = new String[arraySize];
    }
    @Override
    public Iterator<String> iterator() {
        return new ArrayIterator(this);
    }
    public void addBook(String book) {
        if (index > books.length)
            throw new RuntimeException("index out of array size!");
        this.books[index++] = book;
    }
    public String getBook(int index) {
        if (index > books.length - 1)
            throw new RuntimeException("index out of array size!");
        return books[index];
    }
    public int size() {
        return books.length;
    }
}

? 測(cè)試類

public static void main(String[] args) {
        BookArray bookArray = new BookArray(4);
        bookArray.addBook("java編程思想");
        bookArray.addBook("java核心技術(shù)");
        bookArray.addBook("設(shè)計(jì)模式之禪");
         bookArray.addBook("Spring實(shí)戰(zhàn)");
        Iterator<String> iterator = bookArray.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

? 輸出

java編程思想
java核心技術(shù)
設(shè)計(jì)模式之禪
Spring實(shí)戰(zhàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容