設計模式(19)之迭代器模式

迭代器模式(Iterator Pattern)提供一種方法,使得在不暴露底層實現(xiàn)的情況下,提供一種順序訪問一組對象的方法。Java中的Iterator.java迭代器接口就是該設計模式的體現(xiàn)。

一、需求舉例:

遍歷項目中使用的開發(fā)語言,{"Java", "Python", "C/C++", "C#", "Groovy", "Scala", "Shell"},分別做相應的處理。

二、類圖:

三、代碼實例:

1.迭代接口:MyIterator

package com.lance.iterator;

public interface MyIterator {
     boolean hasNext();

     Object next();

}

2.迭代器實現(xiàn)類:CodeIterator

package com.lance.iterator;

public class CodeIterator implements MyIterator{

    public String codes[];
    int index;

    public CodeIterator(String[] codes, int index) {
        this.codes = codes;
        this.index = index;
    }

    @Override
    public boolean hasNext() {
        if(index < codes.length){
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        if(this.hasNext()){
            return codes[index++];
        }
        return null;
    }

}

3.容器父類:

package com.lance.iterator;

public interface MyContainer {
    MyIterator getIterator();
}

4.容器實現(xiàn)類:

package com.lance.iterator;

public class CodeContainer implements MyContainer {

    private MyIterator iterator;

    public CodeContainer(MyIterator iterator) {
        this.iterator = iterator;
    }

   @Override
    public MyIterator getIterator() {
        return iterator;
    }
}

5.主類:IteratorPattern

package com.lance.iterator;

public class IteratorPattern {

    public static void main(String[] args) {

        System.out.println("==========start==========");

        String codes[] = {"Java", "Python", "C/C++", "C#", "Groovy", "Scala", "Shell"};

        CodeIterator iterator = new CodeIterator(codes, 0);
        CodeContainer container = new CodeContainer(iterator);

        for(MyIterator myIterator=container.getIterator();myIterator.hasNext();) {
            System.out.println("code language : " + myIterator.next());
        }

        System.out.println("==========end==========");

    }
}

輸出結(jié)果:

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

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