迭代器模式(Iterator)

本文介绍迭代器模式的基本概念,并通过Java和Python代码实现具体案例。展示了如何定义集合接口及其实现,以及创建迭代器来遍历集合元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UML类图:

代码实现:

    public interface Iterator<T>
    {
        T GetCurrentItem();
        T First();
        T Next();
        Boolean IsDone();
    }

    public interface Aggregate<T>
    {
        Iterator<T> CreateIterator();
    }

    public class ConreteAggregate<T> : Aggregate<T>
    {
        List<T> arr = new List<T>();

        public Iterator<T> CreateIterator()
        {
            return new ConcreteIterator<T>(this);
        }

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

        public T this[int index]
        {
            get
            {
                return arr[index];
            }
            set
            {
                arr.Insert(index, value);
            }
        }
    }

    public class ConcreteIterator<T> : Iterator<T>
    {
        ConreteAggregate<T> arr;
        int indexer = 0;

        public ConcreteIterator(ConreteAggregate<T> arr)
        {
            this.arr = arr;
        }

        public T GetCurrentItem()
        {
            if (indexer < arr.Count)
                return arr[indexer];
            else
                return default(T);
        }

        public T First()
        {
            if (arr.Count != 0)
                return arr[0];
            else
                return default(T);
        }

        public T Next()
        {
            indexer++;
            if (indexer < arr.Count)
                return arr[indexer];
            else
                return default(T);
        }

        public bool IsDone()
        {
            return indexer < arr.Count - 1 ? false : true;
        }
    }

 

Python代码实现

class Iterator(object):
    def GetCurrentItem(self):
        raise NotImplementedError("abstract")
    def Next(self):
        raise NotImplementedError("abstract")
    def IsDone(self):
        raise NotImplementedError("abstract")
    def GetFirst(self):
        raise NotImplementedError("abstract")

class ConcreteIterator(Iterator):
    __component = None
    __index = 0
    def __init__(self, component):
        self.__component=component
    def GetCurrentItem(self):
        return self.__component.list[self.__index]
    def Next(self):
        if not self.IsDone():
            self.__index += 1
            return self.__component.list[self.__index]
        else:
            return None
    def IsDone(self):
        if self.__index == len(self.__component.list) - 1:
            return True
        else:
            return False
    def GetFirst(self):
        return self.__component.list[0]

class AbstractComponent(object):
    def CreateIterator(self):
        raise NotImplementedError("abstract")

class Component(AbstractComponent):
    __iterator=None
    list=[]
    def CreateIterator(self):
        return ConcreteIterator(self)


if __name__ == "__main__":
    list = [1,2,3]
    component = Component()
    component.list=list

    iterator=component.CreateIterator()
    print(iterator.GetCurrentItem())
    print(iterator.Next())
    print(iterator.IsDone())
    print(iterator.GetCurrentItem())
    print(iterator.Next())
    print(iterator.IsDone())
    print(iterator.GetFirst())


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值