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;
        }
        /// 
        /// 通过该方法返回对象中存储的数据
        /// 
        /// 
        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();

你可能感兴趣的:(c#设计模式,c#,迭代器模式,开发语言)