Skip to content

Latest commit

 

History

History
101 lines (77 loc) · 1.71 KB

迭代器模式.md

File metadata and controls

101 lines (77 loc) · 1.71 KB

迭代器模式

介绍

迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,来源于对容器的访问。

定义

提供一种方法顺序访问一个容器对象中的各个元素,而不需要暴露该对象的内部表示。

使用场景

遍历一个容器对象时。

通用代码

Iterator.java

public interface Iterator<T> {
    /**
     * 是否还有下一个元素
     * @return true - 有 false - 无
     */
    boolean hasNext();

    /**
     * 将游标移动到下一个位置
     * @return 下一个位置的元素
     */
    T next();
}

ConcreateIterator.java

public class ConcreateIterator<T> implements Iterator<T> {
    private List<T> list = new ArrayList<>();
    private int cursor = 0;

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

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

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

Aggregate.java

public interface Aggregate<T> {

    void add(T obj);

    void remove(T obj);

    /**
     * 获取容器的迭代器
     * @return
     */
    Iterator<T> iterator();

}

ConcreateAggregate.java

public class ConcreateAggregate<T> implements Aggregate<T> {

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

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

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

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

源码分析

待续