行為型模式--迭代器模式

迭代器模式(Iterator)用于依序遍歷访问集合对象的每一元素,但不暴露集合對象的内部结构,只允許让外部來访问集合内部的数据,在實作上通常會抽象出一个迭代器类並含有hasNext() next()之接口定义,再由其繼承具体子類負責集合对象的遍历行为之功能。

示例:

from abc import ABCMeta, abstractmethod

 

class Iterator(object):       #迭代器抽象基類

    __metaclass__ = ABCMeta     

          @abstractmethod

    def hasNext(self):

        pass

          @abstractmethod

    def next(self):

        pass

 

class ConcreteIterator(Iterator):      #具体子類

    def __init__(self, alist):             #傳入list型式之alist參數

        self.alist = alist

 

    def hasNext(self):

        '''判別是否还有下一个元素'''

        return self.alist != []          #直接回傳條件式判斷bool

 

    def next(self):

        '''返回下一个元素'''

        return self.alist.pop(0)     #移除列表中指定索引之元素---移除指定索引時會將該元素傳回,故可知目前值為何(*但會破壞原list之存值)

 

class Aggregate(object):           #一般抽象基類

    def iterator(self):

        pass

 

class ConcreteAggregate(Aggregate):     #一般具体子類

    def __init__(self, alist):

        self.alist = alist

 

    def iterator(self):

        '''返回迭代器对象'''

        return ConcreteIterator(self.alist)             #list值傳入ConcreteIterator類中以初始化,故此回傳值便具有迭代器功能

 

if __name__ == "__main__":

    concreteAggregate = ConcreteAggregate([1, 2, 3])

    concreteIterator = concreteAggregate.iterator()    #此變量已具迭代器功能

    while concreteIterator.hasNext():

        print concreteIterator.next()

輸出:

1

2

3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值