<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 迭代模式
{
    //定义得到开始对象,得到下一个对象,判断是否到结尾,当前对象等等抽象方法,统一接口。
    abstract class Iterator
    {
        public abstract object First(); //定义得到开始对象
        public abstract object Next();  //得到下一个对象
        public abstract bool IsDone();  //判断是否到结尾,
        public abstract object CurrentItem();//统一接口。
    }
}</span>
<span style="font-size:18px;">//聚集抽象类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 迭代模式
{
    //创建迭代器
  abstract  class Aggregate
    {
      public abstract Iterator CreateIterator();
</span>
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 迭代模式
{
    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;                      //ret 在这是什么意思?
            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];
        }
        //判断当前师傅偏历到结尾,到结尾返回True
        //public override bool IsDone();
        //{
        //    return current > = aggregate.Count ? true : false;
        //}
        ////返回当前聚集对象
        //public override object CurrentItem()
        //{
        //    return aggregate[current];
        //}
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 迭代模式
{
    class ConcreteAggregate : Aggregate
    {
        //声明一个IList泛型变量,用于存放聚合对象,用ArrayList同样可以实现
        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); }
        }
    }
}
  using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 迭代模式
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteAggregate a = new ConcreteAggregate(); //公交车 聚集对象
            //新上来乘客,即对象组
            
            a[0] = "大鸟";
            a[1] = "小菜";
            a[2] = "行李";
            a[3] = "公交内部员工";+
            a[4] = "小偷";
            Iterator i = new ConcreteIterator(a);  //售票员处处,先看好上车是哪些人,也即是声明迭代对象
            object item = i.First();
            while (!i.IsDone())  //从第一个乘客开始
            {
                Console.WriteLine("{0} 请买车票!",i.CurrentItem());
                i.Next();
            }
            Console.Read();
        }
    }
}
<span style="font-size:18px;">a[1] = "大鸟"; a[2] = "小菜"; a[3] = "行李"; a[4] = "公交内部员工"; a[5] = "小偷";</span>
<span style="font-size:18px;">a[0] = "大鸟"; a[1] = "小菜"; a[2] = "行李"; a[3] = "公交内部员工"; a[4] = "小偷";</span>
<span style="font-size:18px;">        Console.WriteLine("{0} 请买车票!",i.CurrentItem());</span>版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u013067756/article/details/48005393