c#设计模式——迭代器模式

迭代器模式用于访问一个类,这个类称为聚合类,因为该类中含有很多个对象,迭代器就指定了访问这个类中对象的方法,比如访问第一个数据,访问下一个数据等,代码如下:
1、抽象迭代器类
指定了访问聚合类中对象的方法

  interface IIterator
    {
        void MoveNext();
        object GetCurrent();
        bool IsFirst();
    }

2、具体迭代器类
具体迭代器类除了实现抽象迭代器中的方法以外,还通过构造函数传入了具体聚合类的对象,并通过调用聚合类中的GetList方法来获取具体聚合类中对象的数据集合,并存在一个list的集合中

class ConcreteIterator : IIterator
    {
        List<object> list = new List<object>();
        int index;
        public ConcreteIterator(ConcreteProductList concreteProductList)
        {
            list = concreteProductList.GetList();
            index = 0;
        }
        public void MoveNext()
        {
            index++;
        }
        public object GetCurrent()
        {
            return list[index];
        }

        public bool IsFirst()
        {
            return index == 0 ? true : false;
        }
    }

3、抽象聚合类
定义了一个抽象方法,该方法用于创建迭代器对象,该方法也是一个工厂方法;并且还定义了一个_List的集合对象,用于存储数据;另外还有一个GetList方法,该方法用于将聚合类中存储的数据提供给外部类调用,主要是给具体迭代器类调用

 abstract class AbstractProductList
    {
        List<object> _List = new List<object>();//没有将其申明为Public,放置被任意调用,而是通过GetList方法来获取
        public AbstractProductList(List<object> list)
        {
            this._List = list;
        }
        /// <summary>
        /// 通过该方法返回对象中存储的数据
        /// </summary>
        /// <returns></returns>
        public List<object> GetList()
        {
            return this._List;
        }
        public abstract IIterator CreateIterator();//创建迭代器对象
    }

4、具体聚合类
重写了抽象聚合类中的创建迭代器的方法,返回了具体迭代器对象;另外调用了基类的构造函数

 class ConcreteProductList:AbstractProductList 
    {
        public ConcreteProductList (List <object > list):base (list)
        {

        }
        public override IIterator CreateIterator()
        {
            return new ConcreteIterator(this);
        }
    }

调用:
第一步、实例化抽象聚合类同时往聚合类中传入数据;
第二步、用聚合类对象调用具体迭代器
第三步、使用迭代器去访问聚合中的对象

  List<object> list = new List<object>() { 1,2,3,4,5};
            AbstractProductList abstractProductList = new ConcreteProductList(list);
            IIterator iterator = abstractProductList.CreateIterator();

            var item = iterator.GetCurrent();
            iterator.MoveNext();
            var itemNext = iterator.GetCurrent();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值