GGYS

博客园 首页 新随笔 联系 订阅 管理
  122 随笔 :: 0 文章 :: 1 评论 :: 8015 阅读

定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示

模式优点: 1、它支持以不同的方式遍历一个聚合对象。

                 2、迭代器简化了聚合类。

                 3、在同一个聚合上可以有多个遍历。

                 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。.

 //聚集抽象类
    abstract class Aggregate
    {
        public abstract Iterator CreateIterator();//创建迭代器
    }

//具体聚集类
    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);}
            }
    }

 

 //迭代器抽象类
    abstract class Iterator
    {
        public abstract object First();//得到开始对象
        public abstract object Next();//得到下一个对象
        public abstract bool IsDone();//判断是否结尾
        public abstract object CurrentItem();//当前对象
    }
//具体迭代类
    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()//判断当前是否遍历到结尾,到结尾返回true
        {
            return current >= aggregate.Count ? true : false;
        }
        public override object CurrentItem()//返回当前的聚集对象
        {
            return aggregate[current]; 
        }
    }

 

posted on   pengpeng077  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示