”大风车吱呀吱悠悠的转,这里的风景啊真好看,天好看,地好看,还有一群快乐的小伙伴,大风车转呀转悠悠,快乐的伙伴手牵着手,牵着你的手,牵着我的手......“童年的美好时光因为有了《动画城》的陪伴而倍感幸福,那个时候,家里有一台古董式的电视机,是一台黑白电视机,转台的时候需要通过电视机上面的那些按钮来完成,也就是换台的按钮,但是并不是每次都那么幸运,可以准时收看我喜欢的儿童节目,有时候出现一片白茫茫的雪花点儿,剩下的就只是郁闷了。就这样,动画片稳稳的托住了我童年的欢乐。

随着科技的飞速发展,各种电视机可谓是百家争鸣,百花齐放,三星SAMSUNG ,索尼SONY液晶电视 ,海信Hisense液晶电视等,让你眼花缭乱,而那些黑白的电视机慢慢淡出我们的视线,归隐山林,与那时的电视机相比,现今的电视机给我们带来的最大便利之一就是增加了电视机遥控器,我们在进行开机、关机、换台、改变音量等操作时都无须直接操作电视机,可以通过遥控器来间接实现。我们可以将电视机看成一个存储电视频道的集合对象,通过遥控器可以对电视机中的电视频道集合进行操作,如返回上一个频道、跳转到下一个频道或者跳转至指定的频道。遥控器为我们操作电视频道带来很大的方便,用户并不需要知道这些频道到底如何存储在电视机中。

今天我们的设计模式就从电视机遥控器开始说起,在软件开发中,也存在大量类似电视机一样的类,它们可以存储多个成员对象,这些类通常称为聚合类(Aggregate Classes),对应的对象称为聚合对象。为了更加方便地操作这些聚合对象,同时可以很灵活地为聚合对象增加不同的遍历方法,我们也需要类似电视机遥控器一样的角色,可以访问一个聚合对象中的元素但又不需要暴露它的内部结构。首先我们来看一下迭代器模式的结构图;

对上述结构图进行一些解释:

Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的next()方法,用于判断是否还有下一个元素的hasNext()方法,用于获取当前元素的currentItem()方法等,在具体迭代器中将实现这些方法。
        ConcreteIterator(具体迭代器):它实现了抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置,在具体实现时,游标通常是一个表示位置的非负整数。
       Aggregate(抽象聚合类):它用于存储和管理元素对象,声明一个createIterator()方法用于创建一个迭代器对象,充当抽象迭代器工厂角色。
       ConcreteAggregate(具体聚合类):它实现了在抽象聚合类中声明的createIterator()方法,该方法返回一个与该具体聚合类对应的具体迭代器ConcreteIterator实例。

在迭代器模式中,提供了一个外部的迭代器来对聚合对象进行访问和遍历,迭代器定义了一个访问该聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有。迭代器的引入,将使得对一个复杂聚合对象的操作变得简单。
        迭代器模式遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。

迭代器模式之看芒果台还是央视nie?相关推荐

  1. php foreach 循环 判断index 小于多少_PHP设计模式之迭代器模式 - 硬核项目经理

    一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便 ...

  2. PHP设计模式之迭代器模式

    一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便 ...

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

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

  4. .NET设计模式(18):迭代器模式(Iterator Pattern)(转)

    概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据. ...

  5. JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。

    JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的. 看完这段代码是不是很熟悉,与我们上面代码基本类似.单列集合都使用到了迭代器,我们以Arr ...

  6. 《Head first设计模式》学习笔记 – 迭代器模式

    迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了! 真是个好消息!现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃 ...

  7. 集合遍历[设计模式总结] 9. 迭代器模式

    工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家起一学习一下集合遍历 引子 例如Waitress类要遍历打印两种菜单,一种是基于ArrayList,一种是基于数组: 则Wait ...

  8. Java设计模式之行为型:迭代器模式

    一.什么是迭代器模式: 实际开发中,我们针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但我们不希望在集合容器的抽象接口层中充斥着各种不同的遍历操作,这时候我们就需要一种能完成下面功能的迭代器 ...

  9. 设计模式漫谈之迭代器模式

    谈恋爱是两个人的事,结婚是两个家庭的事.最近事也挺多的.我也挺烦的,有时候,我也为自己的将来担忧,我自认为自己的技术过硬,但是千里马只有遇到伯乐才能发挥作用. 技术上让我高兴的事是,有个技术问题终于突 ...

  10. 迭代器模式源码解析(jdk+mybatis)

    自己实现的数据结构,迭代器在源码中的一些应用,java.util.Iterator接口,/*** An iterator over a collection. {@code Iterator} tak ...

最新文章

  1. 开发手记之-在Winform中为ListBox的添加选项值,并增加双击事件
  2. Table表头与数据列对齐问题解决方案
  3. android camera入门,android 基础一 Camera1 预览、拍照
  4. unbuntu server (linux系统)下面安装 lamp
  5. Photon多人游戏开发教程
  6. mysql 一对多 关联一条最新的数据_不得不会的mysql锁
  7. 【Python爬虫学习笔记12】Ajax数据爬取简介
  8. 从skyeye学习arm( u-boot篇)
  9. 汇编学习--7.16--int指令
  10. python源码大全-python代码大全
  11. 免费的可直接运行的简单易懂的C++学生信息管理系统
  12. JAVA学习6-集合工具类、流
  13. 一文读懂 UniProt 数据库(2023 最新版)
  14. 语言哲学宣言2018
  15. 使用豆瓣音乐API笔记
  16. 我们DevSkim、Jarvis和USG是这样子的
  17. OpenShift介绍及应用
  18. C++基础---空类型
  19. 中国制霸生成器火了/ 马斯克香水被炒至原价10倍/ 闽南话翻英语算法来了… 今日更多新鲜事在此...
  20. Buzz 多用途 WordPress主题[v1.10]

热门文章

  1. Unity背包系统(二)背包UI设计
  2. 恒生电子2018.10企业招聘题目
  3. DedeCMS顽固木马后门专杀工具V2.0实现方式研究
  4. 【Python笔记】pyspark.sql.functions
  5. matlab已知随机样本求总体均值与方差的矩估计值(例子应用)
  6. Android自定义控件--圆形进度条(中间有图diao)
  7. C#实战010:Excel操作-查询Excel中的数据
  8. Android6.0 Qualcomm Atheros QCA6174A WiFi Model Support
  9. 数据库表同义词mysql修改_SQLServer中同义词Synonym的用法
  10. 怎么用计算机进行进制间的换算,如何实现16进制与其他进制之间的转换,教你使用16进制计算器...