提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示

优缺点

优点

  • 简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了
  • 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了
  • 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心

缺点

  • 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像ArrayList,我们宁可愿意使用for循环和get方法来遍历集合

适用场景

  • 迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器
  • 由于容器与迭代器的关系太密切了,所以大多数语言在实现容器的时候都给提供了迭代器,并且这些语言提供的容器和迭代器在绝大多数情况下就可以满足我们的需要,所以现在需要我们自己去实践迭代器模式的场景还是比较少见的,我们只需要使用语言中已有的容器和迭代器就可以了

理解实例

迭代器接口

public interface Iterator<T> {public boolean hasNext();public T next();
}

迭代器实现

public class ConcreteItertor<T> implements Iterator<T>{private List<T> list = new ArrayList<>();private int cursor = 0;public ConcreteItertor(List<T> list) {this.list = list;}@Overridepublic boolean hasNext() {return cursor != list.size();}@Overridepublic T next() {T obj = null;if(this.hasNext()) {obj = list.get(cursor++);}return obj;}
}

容器接口

public interface Aggregate<T> {public void add(T t);public void remove(T t);Iterator<T> iterator();
}

容器实现

public class ConcreteAgg<T> implements Aggregate<T>{private List<T> list = new ArrayList<>();@Overridepublic void add(T t) {list.add(t);}@Overridepublic void remove(T t) {list.remove(t);}@Overridepublic Iterator<T> iterator() {return new ConcreteItertor<T>(list);}
}

测试类

public class Test {public static void main(String[] args) {Aggregate<String> aggregate = new ConcreteAgg<>();aggregate.add("张三");aggregate.add("李四");aggregate.add("王五");Iterator<String> iterator = aggregate.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

转载于:https://www.cnblogs.com/cj5785/p/10664616.html

移动架构-迭代器模式相关推荐

  1. Java设计模式之迭代器模式

    迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对 ...

  2. 迭代器模式(lterator Pattern)简介

    定义 迭代器模式(lterator Pattern)又称为游标模式(Cursor Pattern),它提供一种顺序访问集合或容器对象元素的方法,而又无须暴露集合内部表示.迭代器模式可以为不同的容器提供 ...

  3. 设计模式之迭代器模式(Iterator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  4. 大数据架构和模式(一)——大数据分类和架构简介

    概述 大数据可通过许多方式来存储.获取.处理和分析.每个大数据来源都有不同的特征,包括数据的频率.量.速度.类型和真实性.处理并存储大数据时,会涉及到更多维度,比如治理.安全性和策略.选择一种架构并构 ...

  5. 设计模式笔记(18)---迭代器模式(行为型)

    Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示. 动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可 ...

  6. 21Iterator(迭代器)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Iterator(迭代器)模式动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以 ...

  7. 迭代器模式(Iterator pattern)

    一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); w ...

  8. 设计模式(十五):Iterator迭代器模式 -- 行为型模式

    1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...

  9. 设计模式学习总结-迭代器模式(Iterator Pattern)

    问题: 在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍 ...

最新文章

  1. linux独立应用程序开发,Linux应用程序开发(一)
  2. Adobe公司Flex首席产品经理作序推荐
  3. ASP.NET中防止页面多次加载的IsPostBack属性
  4. 中plot 函数中字体大小_Excel中的VLOOKUP函数
  5. 深入分析驴子系列(2)
  6. 华为-RH5885 V3 远程KVM
  7. Nhibernate学习的第一天
  8. 前端aes加密_前端安全攻防解析
  9. 不会日语也能在日本点菜 | 通用篇
  10. C/S权限系统得到拼音和五笔的自定义函数(二)
  11. wampServer虚拟主机配置
  12. 微信语音终于可以转发了,安卓用户优先!
  13. Android手机Home键/Back回退键事件
  14. C#不四舍五入保留两位小数
  15. 省市区地址三级联动jQuery插件Distpicker使用
  16. 小程序与共享图书的融合
  17. substance designer制作眼球法线
  18. 日本IT派遣状况(东京)2现场
  19. 操作系统实验六--设备管理
  20. MT6771/MT6765/MT6762/MT6761+MT6631降蓝牙功率的方法

热门文章

  1. POST请求传递参数(十一)
  2. 超级无敌数字加密算法
  3. lte和4g有什么区别
  4. 事业编前提下,在一个大单位工作好还是在一个小单位工作好?
  5. 普通人怎么样才能存到钱?
  6. 手把手教你如何罗列提纲,避开这3个坑,提升写作效率50%
  7. 什么是 Linux 中的显示管理器?
  8. 手机运行内存越大就越好吗?4GB与8GB的差距真的很明显吗?
  9. 解决VMWare虚拟机IP变成127.0.0.1和选择固定IP段
  10. 为SQL Server Always On可用性组配置托管服务帐户