博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(十七) 迭代器模式
阅读量:6760 次
发布时间:2019-06-26

本文共 1470 字,大约阅读时间需要 4 分钟。

迭代器模式是现在使用非常广泛的一种模式,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也是一个实现了迭代器的例子。还有很多,这里就不一一列举了。

转载地址:http://ggbeo.baihongyu.com/

你可能感兴趣的文章
Servlet中使用RequestDispatcher调派请求--include
查看>>
WinForm 清空界面控件值的小技巧
查看>>
【原创】互联网音视频直播架构方案(技术点)
查看>>
设置textView或者label的行间距方法
查看>>
如何在windows7中使用“专用字符编辑器”中的字
查看>>
关于设置SQLPLUS提示符样式的方法----登陆配置文件,动态加载提示符
查看>>
penetration testers渗透测试,hack,vnc,nat,
查看>>
SQL技巧之行列转换
查看>>
Linux 下摄像头视频采集与显示
查看>>
linux 内核视频-英本网
查看>>
aliyun.com
查看>>
[LintCode] Gray Code 格雷码
查看>>
保存带有emoji的文本报错解决方案
查看>>
Linux系统各发行版镜像下载(2)
查看>>
Web服务精讲–搭个 Web 服务器(二)
查看>>
git for windows+TortoiseGit客户端的使用
查看>>
zookeeper 4 letter 描述与实践
查看>>
SVN使用教程之-分支/标记 合并 subeclipse
查看>>
maven nexus
查看>>
《软件设计师》——法律法规与标准化知识
查看>>