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

Iterator定义了访问和遍历元素的接口。
ConcreteIterator表示具体的迭代器,它实现了Iterator接口。
Aggregate定义创建相应迭代器对象的接口。
ConcreteAggregate实现创建相应迭代器对象的接口,返回ConcreteIterator的一个实例。
三、示例
在C#中,实现迭代器模式是非常方便的,特别是在C#2.0引入yield return之后。下面来看一个简单的例子。
在例子中实现一个奇数生成器,该对象必须实现IEnumerable接口。

 1     public class OddGenerator : IEnumerable
2 {
3 int _max;
4 public OddGenerator(int max)
5 {
6 _max = max;
7 }
8 public IEnumerator GetEnumerator()
9 {
10 for (int i = 1; i <= _max; i += 2)
11 {
12 yield return i;
13 }
14 }
15 }

最后看一下如何调用该对象。

 1     static void Main(string[] args)
2 {
3 OddGenerator oddGenerator = new OddGenerator(10);
4 foreach (int i in oddGenerator)
5 {
6 Console.WriteLine(i);
7 }
8
9 Console.ReadLine();
10 }
 

C#设计模式——迭代器模式(Iterator Pattern)的更多相关文章

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

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

  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)——遍历聚合对象中的元素

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

  6. 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

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

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

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

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

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

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. DataTable 更改在有数据列的类型方法+DataTable 导出excel功能

    /// <summary> /// 导出功能 /// </summary> /// <param name="sender"></para ...

  2. fastreport totalpage 只有设置doublepassreport为true 才正确否则为0

    fastreport totalpage 只有设置doublepassreport为true 才正确否则为0

  3. Folder Recursion with C#

    by Richard Carr, published at http://www.blackwasp.co.uk/FolderRecursion.aspx Some applications must ...

  4. Go 若干技巧

    此文来自 http://denvergophers.com/2013-09/tips-and-tricks.slide ###本文主要涉及到: 1. formatting 技巧 2. 异常处理技巧 3 ...

  5. 菜鸟教程之工具使用(十二)——Eclipse突出显示选中的相同变量

    大家都知道在Eclipse中,选中一个变量或者方法名(或者说是一个单词),当前文件中跟他一样的变量会被突出显示,这个功能很好用.能让我们很方便的找到该变量在哪被用到了.前段时间我的Eclipse的这个 ...

  6. 用CAKeyframeAnimation构建动画路径

    复杂路径的动画,我们可以借助关键关键帧动画(CAKeyframeAnimation)来实现,给其的path属性设置相应的路径信息即可. 以下为一个红色的小球按照指定的路径运动的动画. 此动画关键在于如 ...

  7. url rewrite

    http://www.microsoft.com/taiwan/technet/iis/expand/URLRewrite.aspx http://www.iis.net/learn/extensio ...

  8. git clone简介

    翻译整理自: http://web.mit.edu/~mkgray/project/silk/root/afs/sipb/project/git/git-doc/git-clone.html  在使用 ...

  9. Part 1: Running Oracle E-Business Suite on Oracle Cloud

    You can now run Oracle E-Business Suite on Oracle Cloud.  EBS customers can take advantage of rapid ...

  10. 生成证书时Distribution下面App Store and Ad Hoc 选项不能选择的原因及解决办法

    出现这个问题的原因是:发布用的证书创建是有数量限制的,仅支持3个,所以把原先不用的证书Revoke掉就可以了