迭代器模式

来源:互联网 发布:楼层网络布局图 编辑:程序博客网 时间:2024/06/10 04:47

一句话定义

提供方法顺序访问容器(Array、List...)的元素,同时不暴露对象内部细节。

使用场景

容器对象需要遍历,同时不暴露内部。

实现要点

1. Iterator:迭代器接口,定义访问和遍历元素的接口。2. ConcreteIterarot:具体迭代器,遍历,并保存当前位置。3. Container:容器接口,创建迭代器接口。4. ConcreteContainer:具体容器。

情景假设

集合提供迭代器访问方法(集合本身就使用迭代器模式)

实现步骤

1.  创建迭代器接口
/** * 迭代器接口 * 提供访问、遍历元素的接口 * * @author fengzhen * @version 1.0, 2017/2/13 */public interface Iterator<T> {    /**     * 是否还有下个元素     */    boolean hasNext();    /**     * 获取下一个元素     */    T next();}
2.  创建容器接口
/** * 容器类接口 * 提供获取迭代器接口 * * @author fengzhen * @version 1.0, 2017/2/13 */public interface Container<T> {    void add(T obj);    void remove(T obj);    /**     * 返回迭代器对象     */    Iterator getIterator();}
3.  创建具体迭代器
/** * 具体迭代器 * * @author fengzhen * @version 1.0, 2017/2/13 */public class ConcreteIterator implements Iterator{    // 容器数据    private List containers;    // 当前遍历位置    private int position = 0;    public ConcreteIterator(List containers) {        this.containers = containers;    }    @Override    public boolean hasNext() {        return !(containers.size() <= position);    }    @Override    public Object next() {        if (hasNext()){            return containers.get(position++);        }        return null;    }}
4.  创建具体容器
/** * 具体容器类 * * @author fengzhen * @version 1.0, 2017/2/13 */public class ConcreteContainer implements Container<String>{    private List<String> strings = new ArrayList<>();    @Override    public void add(String obj) {        strings.add(obj);    }    @Override    public void remove(String obj) {        strings.remove(obj);    }    @Override    public Iterator getIterator() {        return new ConcreteIterator(strings);    }}
5.  使用
        ConcreteContainer concreteContainer = new ConcreteContainer();        concreteContainer.add("第1条");        concreteContainer.add("第2条");        concreteContainer.add("第3条");        concreteContainer.add("第4条");        Iterator iterator = concreteContainer.getIterator();        while (iterator.hasNext()){            Log.i("info", "onCreate: ==++" + iterator.next());        }
迭代器模式仅作了解,实际应用基本不需要!
1 0
原创粉丝点击