迭代器模式(python)

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

python内置支持这种模式,所以一般来说,不用自己写,

#encoding=utf-8
#
#by panda
#迭代器(Iterator)模式

def printInfo(info):
    print unicode(info, 'utf-8').encode('gbk')

#迭代器抽象类
class Iterator:
    def First(self):
        pass
    
    def Next(self):
        pass
    
    def IsDone(self):
        pass
    
    def CurrentItem(self):
        pass
    
#集合抽象类
class Aggregate:
    def CreateIterator(self):
        pass
    
#具体迭代器类:
class ConcreteIterator(Iterator):
    aggregate = None
    current = 0
    def __init__(self, aggregate):
        self.aggregate = aggregate
        self.current = 0
    
    def First(self):
        return self.aggregate[0]

    def Next(self):
        ret = None
        self.current += 1
        if(self.current < len(self.aggregate)):
            ret = self.aggregate[self.current]
        return ret

    def IsDone(self):
        if(self.current < len(self.aggregate)):
            return False
        else:
            return True

    def CurrentItem(self):
        ret = None
        if(self.current < len(self.aggregate)):
            ret = self.aggregate[self.current]
        return ret
    
#具体集合类
class ConcreteAggregate(Aggregate):
    items = None
    def __init__(self):
        self.items = []        
    
def clientUI():
    a = ConcreteAggregate()
    a.items.append('大鸟')
    a.items.append('小菜')
    a.items.append('行李')
    a.items.append('老外')
    a.items.append('公交内部员工')
    a.items.append('小偷')
    
    
    printInfo('---------迭代器模式-------------')
    i = ConcreteIterator(a.items)
    item = i.First()
    while(False == i.IsDone()):
        printInfo("%s 请买车票!" % i.CurrentItem());
        i.Next()
        
    printInfo('\n---------python内部迭代-------------')
    for item in a.items:
        printInfo("%s 请买车票!" % item);
    return

if __name__ == '__main__':
    clientUI();


类图


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值