文章出處

使用頻率:★★★★★

一、什么是迭代器模式

提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。

二、補充說明

單一職責原則,分離了集合對象的遍歷行為,抽象出一個迭代器類來負責;

三、角色

迭代器接口

迭代器具體實現

抽象容器

具體容器

四、例子,JAVA實現

例子說明:使用迭代器遍歷容器

迭代器接口

package com.pichen.dp.behavioralpattern.iterator;


public interface Iterator {
    public Object first();
    
    public Object previous();
    
    public Object next();

    public boolean hasNext();

}

迭代器具體實現

package com.pichen.dp.behavioralpattern.iterator;

import java.util.List;


public class MyIterator implements Iterator{
    private List<Object> list;
    private int index = 0;

    public MyIterator(List<Object> list) {
        this.list = list;
    }
    @Override
    public Object previous() {
        if((this.index - 1) < 0){
            return null;
        }else{
            return this.list.get(--index);
        }
        
    }


    @Override
    public Object next() {
        if((this.index + 1) >= this.list.size()){
            return null;
        }else{
            return this.list.get(++index);
        }
    }


    @Override
    public boolean hasNext() {
        if(this.index < (this.list.size() - 1)){
            return true;
        }
        return false;
    }
    /**
     * 〈一句話功能簡述〉
     * 〈功能詳細描述〉
     * @see com.pichen.dp.behavioralpattern.iterator.Iterator#first()
     * @return
     */
    @Override
    public Object first() {
        if(this.list.size() <= 0){
            return null;
        }else{
            return this.list.get(0);
        }
    }

}

抽象容器

package com.pichen.dp.behavioralpattern.iterator;


public abstract class Container {

    public abstract Iterator iterator();
    
    public abstract void put(Object obj);
}

具體容器

package com.pichen.dp.behavioralpattern.iterator;

import java.util.ArrayList;
import java.util.List;



public class MyContainer extends Container{
    private List<Object> list;
    
    public MyContainer() {
        this.list = new ArrayList<Object>();
    }
    @Override
    public void put(Object obj){
        this.list.add(obj);
    }
    @Override
    public Iterator iterator() {
        return new MyIterator(list);
    }

}

客戶端調用示例

package com.pichen.dp.behavioralpattern.iterator;

public class Main {

    public static void main(String[] args) {

        //創建一個自定義容器,直接使用ArrayList的實現,僅僅示例作用
        Container strContainer = new MyContainer();
        strContainer.put("001");
        strContainer.put("002");
        strContainer.put("003");
        
        Iterator myIterator = strContainer.iterator();
        //使用舉例
        System.out.println("------------------next、hasNext示例------------------");
        System.out.println(myIterator.first());
        System.out.println(myIterator.next());
        System.out.println(myIterator.hasNext());
        System.out.println(myIterator.next());
        System.out.println(myIterator.hasNext());
        System.out.println(myIterator.next());
        System.out.println(myIterator.hasNext());
        
        //使用舉例
        System.out.println("------------------previous、hasNext示例------------------");
        System.out.println(myIterator.previous());
        System.out.println(myIterator.previous());
        System.out.println(myIterator.previous());
        System.out.println(myIterator.hasNext());
        
        //使用迭代器遍歷
        System.out.println("------------------迭代器遍歷示例------------------");
        System.out.println(myIterator.first());
        while(myIterator.hasNext()){
            System.out.println(myIterator.next());
        }
    }
}

結果打印

------------------next、hasNext示例------------------
001
002
true
003
false
null
false
------------------previous、hasNext示例------------------
002
001
null
true
------------------迭代器遍歷示例------------------
001
002
003

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()