定义

迭代器模式(lterator Pattern)又称为游标模式(Cursor Pattern),它提供一种顺序访问集合或容器对象元素的方法,而又无须暴露集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。

适用场景

我们把多个对象聚在一起形成的总体称之为集合,集合对象是能够包容一组对象的容器对象。不同的集合其内部元素的聚合结构可能不同,而迭代器模式屏蔽了内部元素获取细节,为外部提供一致的元素访问行为,解耦了元素迭代与集合对象间的耦合,并且通过提供不同的迭代器,可以为同个集合对象提供不同顺序的元素访问行为,扩展了集合对象元素迭代功能,符合开闭原则。迭代器模式适用于以下场景:
1、访问一个集合对象的内容而无需暴露它的内部表示;
2、为遍历不同的集合结构提供一个统一的访问接口。

代码实现

//抽象迭代器
public interface Iterator<E> {E next();boolean hasNext();
}
//抽象容器
public interface IAggregate<E> {boolean add(E element);boolean remove(E element);Iterator<E> iterator();
}
//具体迭代器
public class ConcreteIterator<E> implements Iterator<E> {private List<E> list;private int cursor = 0;public ConcreteIterator(List<E> list) {this.list = list;}public E next() {return this.list.get(this.cursor ++);}public boolean hasNext() {return this.cursor < this.list.size();}
}
//具体容器
public class ConcreteAggregate<E> implements IAggregate<E> {private List<E> list = new ArrayList<E>();public boolean add(E element) {return this.list.add(element);}public boolean remove(E element) {return this.list.remove(element);}public Iterator<E> iterator() {return new ConcreteIterator<E>(this.list);}
}
public class Test {public static void main(String[] args) {//来一个容器对象IAggregate<String> aggregate = new ConcreteAggregate<String>();//添加元素aggregate.add("one");aggregate.add("two");aggregate.add("three");//获取容器对象迭代器Iterator<String> iterator = aggregate.iterator();//遍历while (iterator.hasNext()) {String element = iterator.next();System.out.println(element);}}
}

优缺点

优点:
1、多态迭代:为不同的聚合结构提供一致的遍历接口,即一个迭代接口可以访问不同的集合对象;
2、简化集合对象接口:迭代器模式将集合对象本身应该提供的元素迭代接口抽取到了迭代器中,使集合对象无须关心具体迭代行为;
3、元素迭代功能多样化:每个集合对象都可以提供一个或多个不同的迭代器,使的同种元素聚合结构可以有不同的迭代行为;
4、解耦迭代与集合:迭代器模式封装了具体的迭代算法,迭代算法的变化,不会影响到集合对象的架构。
缺点:
对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐。

迭代器模式(lterator Pattern)简介相关推荐

  1. 设计模式 - 迭代器模式(iterator pattern) 具体解释

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

  2. 设计模式:迭代器模式(Iterator Pattern)

    迭代器模式(Iterator Pattern): 属于行为型模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即: 不暴露其内部结构.

  3. 迭代器模式(Iterator pattern)

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

  4. 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

    一.你在开发中使用过迭代吗?      当你在使用JavaScript开发客户端应用的时候使用过for...in吗?  1<script type="text/javascript&q ...

  5. 听webcast的行为型模式篇-迭代器模式(Iterator Pattern) 记录

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> dotnet或java里 ...

  6. 33迭代器模式(Iterator Pattern)

    动机(Motivate):     在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种" ...

  7. 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern

    1 package com.tn.pattern; 2 3 public class Client { 4 public static void main(String[] args) { 5 Obj ...

  8. java迭代器的使用场景_集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示...

    一句话概括: 顺序访问集合对象的元素,不需要知道集合对象的底层表示. 补充介绍: 迭代器模式(Iterator Pattern)相信大家都已经见过不少次了,当你学习Java或者其他编程语言的开始你就会 ...

  9. 遍历聚合对象中的元素——迭代器模式(二)

    2 迭代器模式概述 在软件开发中,我们经常需要使用聚合对象来存储一系列数据.聚合对象拥有两个职责:一是存储数据:二是遍历数据.从依赖性来看,前者是聚合对象的基本职责:而后者既是可变化的,又是可分离的. ...

  10. 遍历聚合对象中的元素——迭代器模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/9992005 20世纪80年代,那时我家有一台"古老的"电视机,牌子我忘 ...

最新文章

  1. 深度学习入门Fast.ai 2.0上线!自带中文字幕,所有笔记、资源全部免费!
  2. react不同环境不同配置angular_DevOps 前端项目(angular、vue、react)打包静态资源生成一份Docker镜像支持部署不同环境...
  3. 基于php在线相册,基于PHP的图片相册管理分享系统设计
  4. 世界上第一台电子计算机电子逻辑原件,1、(ID10542分)世界上的第一台电子计算机使用的逻辑元件.doc...
  5. Codeup墓地-问题 A: 还是畅通工程
  6. VMware Tools installation cannot be started manually while Easy Install is in progress.
  7. 微信H5支付(基于Java实现微信H5支付)
  8. Android性能优化之APK瘦身最全总结
  9. OpenJTAG与JLink的区别比较
  10. tempdb相关文章
  11. 简直太强,把任意图片设置为鼠标指针
  12. FIL WORLD全球化应用,WORLD量化助推Filecoin生态落地
  13. netty实现 http 长连接
  14. Android 11 PackageManagerService源码分析(一):PMS启动的总体流程
  15. 简易版购物车案例(vue)
  16. 正在使用赶牛! 赶牛,中国股民的微博客
  17. webrtc源码学习 - 点对点(P2P)链接过程(peer connection)
  18. 刘晓燕《不就是语法和长难句吗》第一章个人笔记
  19. 小红帽学前端 | 1.3 常用 HTML 元素
  20. 计算机恢复数据怎么恢复,电脑不小心删除的文件如何恢复?教你数据恢复方法!...

热门文章

  1. 【笔记】最后14堂星期二的课
  2. 计算机第一课 纪律 教案,七年级下信息技术第一单元第一课教案
  3. 李学江:B2B行业门户网站最终页标题设置方法
  4. Thread.Sleep线程休眠
  5. 3-1 改变色度空间—OpenCV-Python教程翻译
  6. CSS+JS仿QQ面板风格的多级折叠下拉菜单
  7. Getter和Setter是什么?有什么作用?实现多种数据类型的Getter、Setter方法?实现Getter、Setter的常见的错误?
  8. HPA的target显示unknown
  9. multisim 常见报错
  10. 逆波兰计算器(含完整版)