行为型(五) - 迭代器模式

一、概念

迭代器模式(Iterator Pattern):迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。

通俗的讲:迭代器模式就是提供一种遍历的方法,这种方法有两个特点:一是按你想要的方式访问到你想访问的元素,二是不暴露底层是什么存的。

大部分编程语言都提供了遍历容器的迭代器类,我们在平时开发中,直接拿来用即可,几乎不大可能从零编写一个迭代器。

二、实现

这里实现一个简单字符串迭代器:

1、迭代器接口

public interface Iterator<E> {
    boolean hasNext();
    void next();
    E getCurrentItem();
}

2、实现迭代器

public class ArrayIterator<E> implements Iterator<E> {
    private int index;
    private ArrayList<E> arrayList;

    public ArrayIterator(ArrayList<E> list) {
        this.arrayList = list;
    }

    @Override
    public boolean hasNext() {
        return index != arrayList.size();
    }

    @Override
    public void next() {
        index++;
    }

    @Override
    public E getCurrentItem() {
        return arrayList.get(index);
    }
}

3、测试类

public class Client {
    public static void main(String[] args) {
        ArrayList<String> nameList = new ArrayList<>();
        nameList.add("Jay");
        nameList.add("Jason");
        nameList.add("Daniel");
        
        ArrayIterator iterator = new ArrayIterator(nameList);
        while (iterator.hasNext()) {
            String name = (String) iterator.getCurrentItem();
            System.out.println(name);
            iterator.next();
        }
    }
}

4、运行结果
迭代器模式结果.png

总结:对于类似数组和链表这样的数据结构,遍历方式比较简单,在原来的类中实现也可以。但是,对于复杂的数据结构(比如树、图)来说,有各种复杂的遍历方式。比如,树有前中后序、按层遍历,图有深度优先、广度优先遍历等等。如果将这部分遍历的逻辑写到容器类中,也会导致容器类代码的复杂性,所以统一将遍历操作拆分到迭代器类中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值