Administrator
发布于 2024-08-02 / 14 阅读
0
0

迭代器模式

问题描述

遍历对象时,又想要别人访问他的元素,但是又不想暴露内部的结构,这时可以使用迭代器模式。

代码实现

数据抽象类

    public abstract class IMyData
    {
        public abstract Iterator CreateIterator();
    }

迭代器抽象类

    public abstract class Iterator
    {
        public abstract Object First();
        public abstract Object Next();
        public abstract bool IsDone();
        public abstract Object CurrentItem();

    }

数据类

    public class MyData : IMyData
    {
        private List<Object> mData = new List<Object>();
        public override Iterator CreateIterator()
        {
            return new MyIterator(this);
        }

        public int Count()
        {
            return mData.Count;
        }

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

        public object GetElement(int index)
        {
            return mData[index];
        }
    }

迭代器类

public class MyIterator :Iterator
{
    private MyData mData;

    private int current = 0;
    public MyIterator(MyData data)
    {
        mData = data;
    }
    

    public override object CurrentItem()
    {
        if (current < mData.Count())
            return mData.GetElement(current);
        return null;
    }

    public override object First()
    {
        if (mData.Count() <= 0) return null;
        return mData.GetElement(0);
    }

    public override bool IsDone()
    {
        return current>= mData.Count();
    }

    public override object Next()
    {
        if(current < mData.Count())
            return mData.GetElement(current++);
        return null;
    }
}

Main方法

    internal class Program
    {
        static void Main(string[] args)
        {
            MyData MyData = new MyData();  
            MyData.Add("a");
            MyData.Add("b");
            MyData.Add("c");
            MyData.Add("d");

            Iterator i = MyData.CreateIterator();
            while(!i.IsDone())
            {
                Console.WriteLine($"{i.CurrentItem()}");
                i.Next();
            }
        }
    }

执行结果

a
b
c
d

UML图


评论