迭代器模式

一句话定义

提供方法顺序访问容器(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());
        }
迭代器模式仅作了解,实际应用基本不需要!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值