设计模式(十六)——迭代器模式

来源:互联网 发布:电子相册制作软件 知乎 编辑:程序博客网 时间:2024/06/06 02:24

迭代器模式(Iterator)

迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。

代码

1.代码如下:

迭代器抽象类

using System;namespace Iterator{//迭代器抽象类public abstract class Iterator{//第一个public abstract object First();//下一个public abstract object Next();//是否结束public abstract bool IsDone();//当前对象public abstract object CurrentItem();}}

聚集抽象类

using System;namespace Iterator{//聚集抽象类public abstract class Aggregate{public abstract Iterator CreateIterator();}}

具体迭代器类

using System;namespace Iterator{//具体迭代器类public 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];}}}

具体聚集类

using System;using System.Collections;using System.Collections.Generic;namespace Iterator{//具体聚集类public 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); }}}}
2.客户端代码如下:

客户端

using System;namespace Iterator{class MainClass{public static void Main (string[] args){ConcreteAggregate concreteAggregate = new ConcreteAggregate ();concreteAggregate [0] = "A";concreteAggregate [1] = "B";concreteAggregate [2] = "C";concreteAggregate [3] = "D";concreteAggregate [4] = "E";Iterator iterator = new ConcreteIterator (concreteAggregate);while (!iterator.IsDone ()) {Console.WriteLine (iterator.CurrentItem());iterator.Next ();}}}}
3.运行结果

UML图


源码下载地址:https://gitee.com/ZhaoYongshuang/DesignPattern.git
阅读全文
1 0
原创粉丝点击