设计模式之迭代器模式

此模式看下图就知道了,用来遍历访问ArrayList中数据对象,而不会暴露内部逻辑。
在这里插入图片描述

在ArrayList中有一个迭代器,Itr,用来访问ArrayList中的数据。

一般调用方式如下,

List<String> list = new ArrayList<>();
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());
}

把ArrayList源码提取出来,去掉和上面迭代无关的代码,变成如下样子,

public class ArrayList<E> implements List<E>{

	private int size; //下面数组的长度
	transient Object[] elementData;

	public Iterator<E> iterator() {
        return new Itr();
    }

    
    private class Itr implements Iterator<E> {
        int cursor;  

        public boolean hasNext() {
            return cursor != size; //当前游标没有到最大长度,表示还有下一个
        }

        public E next() {
            int i = cursor;
            Object[] elementData = ArrayList.this.elementData;
            cursor = i + 1; //获取完数据后,游标下移一位
            return (E) elementData[i];
        }
    }
}

从上面调用list.iterator()其实是获取了一个内部类,这个内部类用来通过next()遍历数组,而我们不用关心next()中是怎么实现的,只需要调用即可。

再看iterator()这个方法,是不是很像工厂方法,而ArrayList就是这个工厂,用来生产迭代器对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值