1. 程式人生 > >設計模式 --- 迭代器模式

設計模式 --- 迭代器模式

1.定義

提供一種方法順序訪問一個容器物件中的各個元素,而又不需要暴露該物件的內部表示。

 

2.使用場景

遍歷一個容器物件

 

3.簡單實現

大部分容器類都有提供迭代方法 不需要我們自己實現,這裡實現一個通用程式碼。

//迭代器介面
interface Iterator<T>{
    //是否還有下一個元素 true表示有 false表示沒有
    boolean hasNext();
    //返回當前位置的元素並將位置移至下一位
    T nextT();
}

//具體的迭代器類
class ConcreteIterator<T> implements Iterator<T>{

    private List<T> list = new ArrayList<T>();
    private int cursor = 0;

    public ConcreteIterator(List<T> list) {
        this.list = list;
    }

    @Override
    public boolean hasNext() {
        return cursor != list.size();
    }

    @Override
    public T nextT() {
        T obj = null;
        if (this.hasNext()){
            obj = this.list.get(cursor++);
        }
        return obj;
    }
}

//容器介面
interface Aggregate<T>{
    //新增一個元素
    void  add(T obj);
    //刪除一個元素
    void  remove(T obj);
    //獲取容器的迭代器
    Iterator<T> iterator();
}

//具體容器類
class ConcreteAggregae<T> implements Aggregate<T>{
    private List<T> list = new ArrayList<T>();

    @Override
    public void add(Object obj) {
        list.add((T) obj);
    }

    @Override
    public void remove(Object obj) {
        list.remove(obj);
    }

    @Override
    public Iterator iterator() {
        return new ConcreteIterator<T>(list);
    }
}


public class IteratorMode {
    public static void main(String[] args){
        Aggregate<String> a = new ConcreteAggregae<>() ;
        a.add("a");
        a.add("b");
        a.add("c");
        a.add("d");
        Iterator<String> iterator =a.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.nextT());
        }
    }

}

4.小結 

優點:

支援以不同的方式去遍歷一個容器物件,也可以有多個遍歷,弱化了容器與遍歷演算法之間的關係。

缺點:

增加了類檔案。