1. using System;
  2.  
  3. namespace ConsoleApplication9
  4. {
  5. class Program
  6. {
  7. /// <summary>
  8. /// 迭代器模式提供了一种方法顺序访问一个聚合对象(理解为集合对象)中各个元素,
  9. /// 而又无需暴露该对象的内部表示,这样既可以做到不暴露集合的内部结构,
  10. /// 又可让外部代码透明地访问集合内部的数据。
  11. /// </summary>
  12. /// <param name="args"></param>
  13. static void Main(string[] args)
  14. {
  15. Iterator iterator;
  16. IListCollection list = new ConcreteList();
  17. iterator = list.GetIterator();
  18. while (iterator.MoveNext())
  19. {
  20. int i = (int)iterator.GetCurrent();
  21. Console.WriteLine(i.ToString());
  22. iterator.Next();
  23. }
  24.  
  25. Console.Read();
  26. }
  27.  
  28. // 抽象聚合类
  29. public interface IListCollection
  30. {
  31. Iterator GetIterator();
  32. }
  33.  
  34. // 迭代器抽象类
  35. public interface Iterator
  36. {
  37. //是否存在下个对象
  38. bool MoveNext();
  39. //获取下标对象
  40. Object GetCurrent();
  41. //下标加1
  42. void Next();
  43. //下标清0
  44. void Reset();
  45. }
  46.  
  47. // 具体聚合类
  48. public class ConcreteList : IListCollection
  49. {
  50. int[] collection;
  51. public ConcreteList()
  52. {
  53. collection = new int[] { , , , };
  54. }
  55. public Iterator GetIterator()
  56. {
  57. return new ConcreteIterator(this);
  58. }
  59. public int Length
  60. {
  61. get { return collection.Length; }
  62. }
  63. public int GetElement(int index)
  64. {
  65. return collection[index];
  66. }
  67. }
  68.  
  69. // 具体迭代器类
  70. public class ConcreteIterator : Iterator
  71. {
  72. // 迭代器要集合对象进行遍历操作,自然就需要引用集合对象
  73. private ConcreteList _list;
  74. private int _index;
  75.  
  76. public ConcreteIterator(ConcreteList list)
  77. {
  78. _list = list;
  79. _index = ;
  80. }
  81.  
  82. public bool MoveNext()
  83. {
  84. if (_index < _list.Length)
  85. {
  86. return true;
  87. }
  88. return false;
  89. }
  90.  
  91. public Object GetCurrent()
  92. {
  93. return _list.GetElement(_index);
  94. }
  95.  
  96. public void Reset()
  97. {
  98. _index = ;
  99. }
  100.  
  101. public void Next()
  102. {
  103. if (_index < _list.Length)
  104. {
  105. _index++;
  106. }
  107. }
  108. }
  109. }
  110. }

16.迭代器模式(Iterator Pattern)的更多相关文章

  1. [设计模式] 16 迭代器模式 Iterator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对迭代器模式是这样说的:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示. 类图和实例: 迭代器模式由以下角 ...

  2. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  3. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

  4. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  5. 二十四种设计模式:迭代器模式(Iterator Pattern)

    迭代器模式(Iterator Pattern) 介绍提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 示例有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现 ...

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

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

  7. 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素

    模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...

  8. 迭代器模式(Iterator Pattern)

    迭代器模式定义:Iterator Pattern提供一种方法顺序访问一个聚合元素中的各个元素,而又不暴漏内部方法 酒吧提供beer和wine: public class Bar { private L ...

  9. C#设计模式——迭代器模式(Iterator Pattern)

    一.概述在软件开发过程中,我们可能会希望在不暴露一个集合对象内部结构的同时,可以让外部代码透明地访问其中包含的元素.迭代器模式可以解决这一问题.二.迭代器模式迭代器模式提供一种方法顺序访问一个集合对象 ...

随机推荐

  1. 迷之this?(转)

    1. 迷之this 对于刚开始进行 JavaScript 编程的开发者来说,this 具有强大的魔力,它像谜团一样需要工程师们花大量的精力去真正理解它. 在后端的一些编程语言中,例如 Java.PHP ...

  2. 160809209_李梦鑫_C语言程序设计实验3 循环结构程序设计

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吉吉老师 实验地点 C05 ...

  3. 第3次作业,c语言

    <C语言程序设计>实验报告 学 号    160809201  姓 名    王浩然专业.班    计科16-2班 学    期  2016-2017 第1学期  指导教师    黄俊莲 ...

  4. Vijos P1769 网络的关键边

    Description 一个连通的无向图,有些点有A属性,有些点有B属性,可以同时具有.删掉某条边后,如果使得连通块中一些点不具有A,B属性的点,求这些边. Sol Tarjan求割边. 首先这些边一 ...

  5. tinyhttp源码阅读(注释)

    这里就不细述了,代码很简单. 其实现的功能比较若,可以做一个参考. 因为其通过文件的权限位来判断是否是一个CGI脚本,所以在权限位不对的情况下会判断不正确.例如我将这个目录放置在NTFS分区,所有的文 ...

  6. Arlenmbx!!!!

    我无限制的以安逸为想法 其实生活的不安逸 我所做的事情和思路到底正不正确? 我失败了? 我做不到? 我尝试做到? 我可以做到! 我能做到 我做到了我已经做到了 难道想法和现实是有区别的吗 有理想只是空 ...

  7. symfony2 环境搭建笔记

    本机环境:windows+xampp symfony下载:官网下载 环境配置: 1.下载后将symfony文件夹解压到xampp/htdocs中(最好改一下文件夹名,尽量小写) 2.Symfony2自 ...

  8. apache2错误日志在哪,可以看到php错误

    在以下路径中 /var/log/apache2/error.log

  9. oracle,mybatis主键自增长

    <insert id="insert" parameterType="resource"> <selectKey resultType=&qu ...

  10. Appium+Robotframework实现Android应用的自动化测试-3:一个必不可少的工具介绍

    万事具备,接下来我们就要开始编写测试脚本了. 不过,有个重要的问题还没有解决.我们知道RobotFramework在web 网页中主要依靠元素的id,name或者xpath来定位页面上的元素,我们依赖 ...