/*
*迭代器(Iterator)模式:提供货一种方法顺序反问一个聚合对象中的各个元素。
*/

    ConcreteAggregate a = new ConcreteAggregate();a[0] = "A";a[1] = "B";a[2] = "C";a[3] = "D";Iterator i = new ConcreteIterator(a);object item = i.First();while (!i.IsDone()){Console.WriteLine("{0} 请买车票! ", i.CurrentItem());i.Next();}Console.ReadLine();/// <summary>/// 迭代器(Iterator) 抽象类/// </summary>abstract class Iterator{public abstract object First();public abstract object Next();public abstract bool IsDone();public abstract object CurrentItem();} /// <summary>/// Aggregate 集聚抽象类/// </summary>abstract class Aggregate{public abstract Iterator CreateIterator();}/// <summary>/// ConcreteIterator 具体迭代器/// </summary>class ConcreteIterator : Iterator{//创建一个具体集聚类对象private ConcreteAggregate aggregate;private int current = 0;//初始化具体集聚类传入对象public ConcreteIterator(ConcreteAggregate aggregate){this.aggregate = aggregate;}public override object First(){return aggregate[0];} public override object Next(){object ret = null;current++;if (current < aggregate.Count)ret = aggregate[current];return ret;}public override bool IsDone(){return current >= aggregate.Count ? true : false;} public override object CurrentItem(){return aggregate[current];}}/// <summary>/// 具体 集聚类/// </summary>class ConcreteAggregate : Aggregate{private IList<object> items = new List<object>();public override Iterator CreateIterator(){return new ConcreteIterator(this);}public int Count{ get { return items.Count; } }//索引public object this[int index]{get { return items[index]; }set { items.Insert(index, value); }}  }

在.net中IEumerator 已经为你准备好了接口,你只要去实现它就好。

其实就一个  foreach 循环的底层方法。 封装后就是foreach  遍历集合

    public interface IEumerator{object Current{ get; }bool MoveNext();void Reset(); }public interface IEnumerable{IEumerator GetEnumerator();}

转载于:https://www.cnblogs.com/dragon-L/p/3791151.html

迭代器(Iterator)模式相关推荐

  1. 设计模式学习笔记——迭代器(Iterator)模式

    设计模式学习笔记--迭代器(Iterator)模式 @(设计模式)[设计模式, 迭代器模式, iterator, 迭代器] 设计模式学习笔记迭代器Iterator模式 基本介绍 迭代器案例 类图 实现 ...

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

    模式定义 提供一中方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示 类图 要点总结 迭代抽象:访问一个聚合对象的内部而无需暴露它的内部表示 迭代多态:为遍历不同的集合结构提供一 ...

  3. C++之迭代器(Iterator)模式

    0. 简介 迭代器模式是一种行为设计模式, 它可以有效管理数据流动的同时,让用户能在不暴露集合底层表现形式 (列表. 栈和树等) 的情况下遍历集合中所有的元素. 迭代器通常会提供一个获取集合元素的基本 ...

  4. c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)

    迭代器(iterator)是一个结构化的模式,用于从源以一次一个的方式提取数据.迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与 ...

  5. .Net中的设计模式——Iterator模式

    在.Net中,我们很少有机会使用Iterator模式,因为.Net Framework已经运用Iterator模式为所有的集合对象实现了迭代器.我们在遍历集合对象时,喜欢使用C#提供的foreach语 ...

  6. java:迭代器Iterator

    迭代器Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法. 通过容器的 iterator()方 ...

  7. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each

    迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...

  8. 设计模式——Iterator模式实现研究

    导读:软件设计模式是一种表达.记录和重用软件设计结构和设计经验的新方法,它对反复出现的设计结构的关键特征进行识别.抽象和命名,使重用成功设计和结构更加容易.本文介绍了软件设计模式的特点.描述方式以及在 ...

  9. STL源码剖析 迭代器iterator的概念 和 traits编程技法

    iterator模式定义如下:提供一种方法,使之能够依序巡访某个 聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式. STL的中心思想在于:将数据容器(containers)和算法(a ...

  10. 【OpenCV】OpenCV实战从入门到精通之 -- 指针访问、迭代器iterator、动态地址计算配合at元素

    目录 1.指针访问像素 2.迭代器操作像素 3.动态地址计算 OpenCV中,有三种方式访问图像像素: 指针访问:C操作符[]: 迭代器iterator 动态地址计算 上述方法在访问速度上略有差异.d ...

最新文章

  1. Android性能优化篇 [ 谷歌官方 ]
  2. 全球首个开放应用模型 OAM 开源 | 云原生生态周报 Vol. 23
  3. svn服务器创建分支原理,svn 创建分支、合并分支、以及报错处理
  4. cxf发布rest风格的webService
  5. 替换url部分_MOCTF部分Web题攻略
  6. 光纤收发器的详细选择方法
  7. 华菱重卡仪表指示说明_仪表装置11种常见故障的解决方法
  8. 如何使用struts2对集合参数进行验证
  9. 洛谷P1321题题解(Java语言描述)
  10. PHP代码中的情话,php语言编程情话
  11. java音乐网站源码_Vue + SpringBoot + MyBatis 音乐网站
  12. 3137102432_施少兵_实验2
  13. delphi启动ie调用本地html传参数_年轻人不讲武德啊!了解下浏览器如何解析html、css,js
  14. java模拟form表单提交图片文件
  15. 揭密如何写ASP木马后门
  16. php总结与展望_2018年的总结划下句号,展望2019
  17. jupyter运行环境配置
  18. 楼天城楼教主的acm心路历程 ---- 抄自网上
  19. 录制和播放RTI DDS(6.0)数据
  20. 体重预测[线性回归]

热门文章

  1. 万网控制面板 php_UPUPW 控制面板启动关闭区介绍
  2. base64 RFC 4648
  3. Oracle dblink报错:ORA-01017、ORA-02063解决
  4. css margin和border,Margin、Border、Padding属性的区别和联系
  5. feign.RetryableException null executing post
  6. android 定时查询,android – 如何检查计时器是否仍在运行?
  7. 使用ajax实现无刷新邮箱验证码,AJAX和WebService实现邮箱验证(无刷新)
  8. mysql 5.6 安装_MySQL的安装,步骤详细
  9. dropout理解(一)
  10. Hive DDL操作