迭代器模式

1類圖

這裏寫圖片描述

2定義

提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。

3應用場景

遍歷一個容器對象時

4迭代器接口

public interface Iterator<E> {

    boolean hasNext();

    E next();

}

5具體迭代器類

public class ConcreteIterator<E> implements Iterator<E>{

    List<E> list = new ArrayList<>();

    private int cursor = 0;

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

    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        return cursor != list.size();
    }

    @Override
    public E next() {
        // TODO Auto-generated method stub
        E obj = null;
        if(this.hasNext()){
            obj = this.list.get(cursor++);
        }
        return obj;
    }

}

6容器接口

public interface Aggregate<E> {

    void add(E obj);
    void remove(E obj);
    Iterator<E> itrerator();

}

7具體容器類

public class ConcreteAggregate<E> implements Aggregate<E> {

    List<E> list = new ArrayList<>();

    @Override
    public void add(E obj) {
        // TODO Auto-generated method stub
        list.add(obj);
    }

    @Override
    public void remove(E obj) {
        // TODO Auto-generated method stub
        list.remove(obj);
    }

    @Override
    public Iterator<E> itrerator() {
        // TODO Auto-generated method stub
        return new ConcreteIterator<>(list);
    }

}

8客戶類

public class Client {
    public static void main(String[] args) {
        Aggregate<String> a = new ConcreteAggregate<>();
        a.add("a");
        a.add("b");
        a.add("c");
        a.add("d");
        a.add("e");
        Iterator<String> iterator = a.itrerator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章