C# 设计模式-迭代器(Iterator)

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


主要组成:

Aggregate-聚合父类或接口

ConcreteAggregate-具体聚合对象

Iterator-迭代器父类或接口

ConcreteIterator-具体迭代器


相关类:

using System;
using System.Collections.Generic;

namespace Iterator
{
    /// 
    /// 聚合父类或接口
    /// 
    abstract class AggregateClass
    {
        public abstract Iterator CreateIterator();
    }

    /// 
    /// 列表聚合
    /// 
    class ListAggregate : AggregateClass
    {
        List list = new List();

        public override Iterator CreateIterator()
        {
            return new ListIterator(this);
        }

        public int Count
        {
            get { return list.Count; }
        }

        public void Add(object item)
        {
            list.Add(item);
        }

        public object GetItemAt(int index)
        {
            return list[index];
        }
    }
    /// 
    /// 迭代器父类或接口
    /// 
    abstract class Iterator
    {
        public abstract void First();
        public abstract void Next();
        public abstract bool IsDone();
        public abstract object CurrentItem();
    }
    /// 
    /// 列表迭代器
    /// 
    class ListIterator : Iterator
    {
        ListAggregate listAggregate;
        int cuurentIndex;

        public ListIterator(ListAggregate listAggregate)
        {
            this.listAggregate = listAggregate;
        }
        //将迭代器置于第一个元素
        public override void First()
        {
            cuurentIndex = 0;
        }
        //下一个元素
        public override void Next()
        {
            cuurentIndex++;
        }
        //是否超出列表
        public override bool IsDone()
        {
            return cuurentIndex >= listAggregate.Count;
        }
        //返回当前元素
        public override object CurrentItem()
        {
            if (IsDone())
            {
                throw new IndexOutOfRangeException();
            }
            return listAggregate.GetItemAt(cuurentIndex);
        }
    }
}
 
  
调用:

using System;

namespace Iterator
{
    class Program
    {
        static void Main(string[] args)
        {
            //列表聚合
            ListAggregate listAggregate = new ListAggregate();
            listAggregate.Add("迭");
            listAggregate.Add("代");
            listAggregate.Add("器");
            //创建迭代器
            Iterator listIterator = listAggregate.CreateIterator();
            for (listIterator.First(); !listIterator.IsDone(); listIterator.Next())
            {
                Console.WriteLine(listIterator.CurrentItem());
            }
            Console.Read();
        }
    }
}

结果:

C# 设计模式-迭代器(Iterator)_第1张图片

参考资料:《设计模式-可复用面对对象软件的基础》


你可能感兴趣的:(C#-设计模式,设计模式,C#,迭代器模式)