【设计模式】15.迭代器模式

说明:迭代器模式可以看成是一个对象的集合,比如List<class>。提供增删,遍历集合里的元素。.NET中的GetEnumerator()就是迭代器模式的。

   迭代器要1个类做聚合,1个类做迭代。聚合有Get迭代方法,具体对象集合(看当时需求),迭代器有MoveNext(),Reset(),Current()方法

实现:

/// <summary>
    /// 迭代器接口
    /// </summary>
    public interface Iterator
    {
        bool MoveNext();
        void Next();
        void Reset();
        object GetCurrent();
    }

    /// <summary>
    /// 聚合对象接口
    /// </summary>
    public interface IList_Num
    {
        Iterator GetIterator();
    }

    /// <summary>
    /// 迭代器具体实现类
    /// </summary>
    public class ConcreteIterator :Iterator
    {
        NumList numlist1;
        int index;

        public ConcreteIterator(NumList nl)
        {
            numlist1 = nl;
            index = 0;
        }

        public bool MoveNext() {
            if (index < numlist1.Length()) 
            { return true; }
            return false;
        }
        public void Next() { 
            if(index<numlist1.Length())
            {
                index++;
            }
        }
        public void Reset() {
            index = 0;
        }
        public object GetCurrent() {
            return numlist1.GetElement(index);
        }
    }

    /// <summary>
    /// 聚合对象的具体实现类
    /// </summary>
    public class NumList : IList_Num
    {
        int[] collection;
        public NumList()
        {
            collection =new int[] { 2, 3, 4, 5, 6 };
        }

        public Iterator GetIterator()
        {
            return new ConcreteIterator(this);
        }

        public int GetElement(int Index)
        {
            return collection[Index];
        }

        public int Length()
        {
            return collection.Length;
        }
    }

    public class test
    {
        public void start() {

            IList_Num num = new NumList();
            Iterator iterator1=num.GetIterator();

            while(iterator1.MoveNext())
            {
                //遍历每个对象
                iterator1.GetCurrent();
                iterator1.Next();
            }
        }
    }
原文地址:https://www.cnblogs.com/laokchen/p/13543798.html