设计模式(十七) 迭代器模式

简介: 迭代器模式是现在使用非常广泛的一种模式,Java、C#等很多语言都是用迭代器创建集合,然后提供for-each语法糖让我们能够方便的遍历集合。如果对Java或C#等语言的集合比较熟悉的话,那么迭代器模式你也一定很熟悉。

迭代器模式是现在使用非常广泛的一种模式,Java、C#等很多语言都是用迭代器创建集合,然后提供for-each语法糖让我们能够方便的遍历集合。如果对Java或C#等语言的集合比较熟悉的话,那么迭代器模式你也一定很熟悉。

首先我们来编写迭代器的接口。该接口有两个方法,next()和hasNext(),用于判断是否存在下一个值并获取当前值。

public interface Iterator {
    boolean hasNext();

    int next();
}

为了配套,一般情况下还有另外一个接口Iterable,集合类一般需要实现该接口表示可以从集合类上获取迭代器。

public interface Iterable {
    Iterator getIterator();
}

然后我们来编写一个自定义集合和该集合的迭代器。注意,迭代器的起始索引应该设置为第一个元素的前一个,这样才能让第一次调用next()获取第一个元素。

public class MyCollection implements Iterable {
    private int[] array;

    public MyCollection(int[] array) {
        this.array = array;
    }

    @Override
    public Iterator getIterator() {
        return new MyCollectionIterator(array);
    }
}

class MyCollectionIterator implements Iterator {
    private int[] array;
    private int current;

    public MyCollectionIterator(int[] array) {
        this.array = array;
        current = -1;
    }

    @Override
    public boolean hasNext() {
        return current <= array.length - 2;
    }

    @Override
    public int next() {
        return array[++current];
    }
}

最后我们来看看运行结果。不出意外的话整个集合都会正确遍历。

    public void run() {
        int[] array = {1, 2, 3, 4, 5, 6};
        MyCollection myCollection = new MyCollection(array);

        Iterator iterator = myCollection.getIterator();
        while (iterator.hasNext()) {
            System.out.printf("%d ", iterator.next());
        }
        System.out.println();
    }

让我们最后再回想一下迭代器使用的现成例子:Java的集合类大多数都实现了迭代器模式;JDBC的结果集也实现了迭代器模式;旧的Java的Enumeration也是一个实现了迭代器的例子。还有很多,这里就不一一列举了。

相关文章
|
4月前
|
设计模式 Java
Java设计模式【十七】:迭代器模式
Java设计模式【十七】:迭代器模式
31 0
|
6月前
|
设计模式 C++ 容器
设计模式之迭代器模式(C++)
设计模式之迭代器模式(C++)
|
4月前
|
设计模式
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
|
6月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
28 0
|
6月前
|
设计模式
设计模式14 - 迭代器模式【Iterator Pattern】
设计模式14 - 迭代器模式【Iterator Pattern】
15 0
|
2天前
|
设计模式 Go
[设计模式 Go实现] 行为型~迭代器模式
[设计模式 Go实现] 行为型~迭代器模式
|
13天前
|
设计模式 Java
小谈设计模式(21)—迭代器模式
小谈设计模式(21)—迭代器模式
|
1月前
|
设计模式 存储 算法
【设计模式】迭代器模式
【设计模式】迭代器模式
|
3月前
|
设计模式 Java 数据挖掘
聊聊Java设计模式-迭代器模式
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。
44 0
聊聊Java设计模式-迭代器模式
|
3月前
|
设计模式 算法 Go
Golang设计模式——07迭代器模式
Golang设计模式——07迭代器模式
24 0