Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式。为了方便理解记忆,我也会称其为遍历模式。

下面是一个迭代器模式的简单案例。

Iterator 定义了迭代接口, 仅 hasNext 和 next 两个方法。Container 定义了集合的接口,必须包含一个返回迭代器类 Iterator 的方法。NameRepository 是容器的具体类,实现 Container 接口,并拥有一个内部类 NameIterator ,该内部类实现了 Iterator 接口,用于遍历容器的全部元素。IteratorPatternDemo 演示迭代器模式。

代码实现

Iterator 接口,定义遍历的两个方法

public interface Iterator {

    public boolean hasNext();

    public Object next();
}

Container 接口,定义返回迭代器 Iterator 的方法

public interface Container {

    public Iterator getIterator();
}

NameRepository 是具体的容器内,含有一个内部类,内部类实现了 Iterator 接口,提供遍历集合元素的功能。

public class NameRepository implements Container {

    private String[] names = "apple,banana,pear,orange".split(",");

    @Override
public Iterator getIterator() {
return new NameIterator();
} private class NameIterator implements Iterator{ private int index; NameIterator(){
index = 0;
} @Override
public boolean hasNext() {
return this.index < names.length;
} @Override
public Object next() {
Object res = names[index];
index++;
return res;
}
}
}

演示代码

public class IteratorPatternDemo {

    public static void main(){

        NameRepository nameRepository = new NameRepository();
Iterator iter = nameRepository.getIterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}

参考资料

Design Patterns - Iterator Pattern, TutorialsPoint

最新文章

  1. 转:Linux内部的时钟处理机制全面剖析
  2. app接口测试-bug分类
  3. mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]
  4. 让reddit/r/programming炸锅的一个帖子,还是挺有意思的
  5. Hadoop 2.4.1 设置问题小结【原创】
  6. 为什么要关闭360云盘:新来的美工嫌我们logo太丑,所以就决定关闭了。这个理由怎么样
  7. html树形菜单控件
  8. Stage3D学习笔记(六):旋转动画效果
  9. 食品药检所LIMS需求分析说明书
  10. Oracle11g R2学习系列 之二基本概念和环境介绍
  11. xen之基本搭建
  12. WebGL自学教程——WebGL演示样本:开始
  13. SAP 邮件发送
  14. Linux常用命令--文件操作
  15. 让linux启动更快的方法
  16. sqlserver存储过程的使用
  17. 2015-10-27 C#3
  18. java、php、.net关于web开发的区别
  19. WinForm读取指定的config文件的内容
  20. IntelliJ IDEA中的properties文件乱码转成中文[unicode码转中文]

热门文章

  1. Java基础知识强化之IO流笔记11:递归之递归概述和注意事项
  2. 9.13noip模拟试题
  3. 【NEERC 2003】有向图破坏
  4. jquery mobile navbar
  5. python中的formatter的详细用法
  6. socket本地模拟TCP 服务器+客户端(二)
  7. 魅蓝3s adb interface 找不到驱动程序
  8. 温故而知新 C++基本类型
  9. PS微观效果
  10. 属性动画(Property Animation)资源