【迭代器模式(了解即可)】

创建一个迭代器,并将一个容器类注入迭代器,使用迭代器这个中间件来实现对容器类的迭代操作

迭代器模式又称为游标模式,它最早源于对容器类的访问。如果我们把遍历的方法放在容器中,那么对于容器类而言就承载了太多的功能,不太符合单一职责原则,而如果暴露给用户实现又会暴露对象的内部实现,因为,迭代模式应运而生,在访问类和容器类中插入了个第三者——迭代器。

public 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 next() {
        T obj = null;
        if (this.hasNext()) {
            obj = this.list.get(cursor++);
        }
        return obj;
    }
}

public class ConcreteAggregate<T> {
    private List<T> list = new ArrayList<T>();
    
    @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 ConcreteIterator<T>(list)
    }
}

// 遍历用的代码
while (CpmcreteAggregate.iterator().hasNext()) {
    // 进行相应的操作
}

对于迭代模式而言,其优点就是支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类和遍历算法的关系。

当然,现在每一种高级语言都有各个容器迭代器的内部实现,所以开发者很少去实现一个迭代器,主要时了解即可,例如Android常用的迭代器模式 —— 数据库查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值