常用的循环遍历数据方法---迭代器模式
来源:互联网 发布:js捕获鼠标点击事件 编辑:程序博客网 时间:2024/06/07 07:46
咱们在C#项目开发过程中,经常使用foreach的方式来循环遍历某个聚合对象;可能已有很多人遗忘了它的工作原理;今天,我们从这里开始:实际上它是把已经聚集好的一个集合,我们不需要知道其实际的对象类型而循环读取数据;这个地方就用到了我们今天要讲的设计模式---迭代器模式;有兴趣的同学,可以下来了解一下IEumerator 和IEnumerable 接口。
什么是迭代器设计模式?提供一种方法顺序访问聚合对象中的各个元素,并又不暴露其内部表示。 也就是说,我们需要访问一个聚合对象的数据时候、需要对聚合对象采用不同的遍历方式的时候,就应该考虑迭代器模式来处理。这样的话,这种迭代器应该具有公有的访问开始、下一个、目前对象的数据、存在多少个对象、是否访问完成等方法。目前,JAVA、C# 等高级开发语言中已经 将对聚合对象的方法封装在一起了;我们使用动手开发类似的迭代器代码较少。所以我们今天仅讲其原理,方便以后备用。
代码部分如下:
//抽象迭代器,声明其方法abstract class Iterator{ //这个地方为什么返回的是object对象呢,因为所有的类都是从Object类继续过来的 //还有这个返回类型为object 是根据聚合对象 是什么类型而决定的public abstract object First();public abstract object Next();public abstract bool IsDone();public abstract object CurrentItem();}//一个具体的迭代器(ConcreteIterator)class ConcreteIterator:Iterator{//定义一个具体的聚合对象(这个具体对象必须有具体的类型)private ConcreteAggregate aggregate;private int current=0;//创建迭代器的时候,需要传入聚集对象public ConcreteIterator(ConcreteAggregate aggregate);{this.aggregate=aggregate;}public override void First(){return aggregate[0];}public override void 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];}}//聚合对象抽象类abstract class Aggregate{ //创建一个迭代器public abstract Iterator CreateIterator();}//聚合对象具体类class ConcreteAggregate: Aggregate{ //使用泛型定义个集合private List<object> items=new List<object>();public override Iterator CreateIterator(){ return new ConcreteAggregate(this);}public int Count{get{return items.Count;}}public object this[int index]{get{ return items[index];}set{ items.Insert(index,value);}}}
客户端代码如下:
//客户端代码ConcreteAggregate a=new ConcreteAggregate();a[0]="合同工";a[1]="临时工";a[1]="公务员";Iterator t=new ConcreteIterator(a);object item=t.First();while(!t.IsDone()){Console.WriteLine("{0}发工资",t.CurrentItem());//读取下一个对象t.Next
0 0
- 常用的循环遍历数据方法---迭代器模式
- 用SQL游标遍历循环数据的方法
- 用SQL游标遍历循环数据的方法
- 用SQL游标遍历循环数据的方法
- 用SQL游标遍历循环数据的方法
- 用SQL游标遍历循环数据的方法
- jsp循环遍历后台List结果的三种常用方法
- jsp循环遍历后台List结果的三种常用方法
- jsp循环遍历后台List结果的三种常用方法
- Map遍历的常用方法
- 常用的循环设计方法
- 循环遍历WebList对象实现的方法
- 循环遍历xml返回xml的方法
- for循环遍历字符串的另一种方法
- java HashMap 循环遍历map的方法
- 循环遍历HashMap的较快方法
- 循环遍历的几种方法
- 对象object循环遍历的方法
- ios调用系统东西
- windows下mongodb的安装及测试
- 大幅面多相机高精度定位及测量解决方案
- 怎么把PDF转PPT文件
- Mac系统的JDK8默认安装路径
- 常用的循环遍历数据方法---迭代器模式
- 灵活多变的Javascript
- makefile 使用实例(三)
- 。net技术架构?
- eclipse + maven + plugin 插件 安装和配置
- JavaScript快速入门(五)——表达式运算
- maven 学习笔记(八)-创建简单的intellij+android+maven工程
- matlab 默认打开路径的修改
- 更轻量的 View Controllers