【设计模式】之迭代器模式

  • UML

  • 原型

	//迭代器抽象类
    abstract class Iterator
    {
        //开始对象
        public abstract object First();
        //下一个对象
        public abstract object next();
        //判断是否到达结尾
        public abstract bool IsDone();
        //当前对象
        public abstract object CurrentItem();
    }
//抽象聚集类
    abstract class Aggregate
    {
        //创建迭代器
        public abstract Iterator CreateIterator();
    }
//具体聚集类
    class ConcreteAggregate : Aggregate
    {
        private IList<object> items = new List<object>();
        //返回一个迭代器
        public override Iterator CreateIterator()
        {
            return new ConcreteIteator(this);
        }
        public int Count
        {
            get => items.Count;
        }
        public object this[int index]
        {
            get => items[index];
            set => items.Insert(index, value);
        }
    }
//具体迭代器
class ConcreteIteator : Iterator
    {
        private ConcreteAggregate aggregate;        //一个聚集对象
        private int current = 0;

        //传入一个聚集对象
        public ConcreteIteator(ConcreteAggregate concreteAggregate)
        {
            this.aggregate = concreteAggregate;
        }
        //获取当前的对象
        public override object CurrentItem()
        {
            return aggregate[current];
        }

        public override object First()
        {
            return aggregate[0];
        }

        public override bool IsDone()
        {
            return current >= aggregate.Count ? true : false;
        }

        public override object next()
        {
            object ret=null;
            current++;
            if(current<aggregate.Count)
            {
                ret = aggregate[current];
            }
            return ret;
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            ConcreteAggregate concreteAggregate = new ConcreteAggregate();
            concreteAggregate[0] = "1";
            concreteAggregate[1] = "2";
            concreteAggregate[2] = 4;
            Iterator iterator = concreteAggregate.CreateIterator();
            object item = iterator.First();
            while(iterator.IsDone()==false)
            {
                Console.WriteLine(item);
                item = iterator.next();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值