1. 迭代器模式(Iterator)介绍

UML类图

角色介绍

  • 抽象容器:一般是一个接口,提供一个iterator()方法。
  • 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
  • 抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方法remove(),
  • 迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。

用途

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

2. 示例

"""Iterator Pattern with Python Code
"""from abc import abstractmethod, ABCMeta# 迭代器抽象类
class Iterator(metaclass=ABCMeta):@abstractmethod def First(self):pass@abstractmethod def Next(self):pass@abstractmethod def Isdone(self):pass@abstractmethod def CurrItem(self):pass# 聚集抽象类
class Aggregate(metaclass=ABCMeta):@abstractmethod def CreateIterator(self):pass# 具体迭代器类
class ConcreteIterator(Iterator):def __init__(self, aggregate):self.aggregate = aggregateself.curr = 0def First(self):return self.aggregate[0]def Next(self):ret = Noneself.curr += 1if self.curr < len(self.aggregate):ret = self.aggregate[self.curr]return retdef Isdone(self):return True if self.curr+1 >= len(self.aggregate) else Falsedef CurrItem(self):return self.aggregate[self.curr]# 具体聚集类
class ConcreteAggregate(Aggregate):def __init__(self):self.ilist = []def CreateIterator(self):return ConcreteIterator(self)class ConcreteIteratorDesc(Iterator):def __init__(self, aggregate):self.aggregate = aggregateself.curr = len(aggregate)-1def First(self):return self.aggregate[-1]def Next(self):ret = Noneself.curr -= 1if self.curr >= 0:ret = self.aggregate[self.curr]return retdef Isdone(self):return True if self.curr-1<0 else Falsedef CurrItem(self):return self.aggregate[self.curr]class Client(object):def main(self):ca = ConcreteAggregate()ca.ilist.append("1")ca.ilist.append("2")ca.ilist.append("3")ca.ilist.append("4")itor = ConcreteIterator(ca.ilist)print(itor.First())while not itor.Isdone():print(itor.Next())print("倒序:")itordesc = ConcreteIteratorDesc(ca.ilist)print(itordesc.First())while not itordesc.Isdone():print(itordesc.Next())if __name__=="__main__":Client().main()

输出

# ./Iterator.py
1
2
3
4
倒序:
4
3
2
1

参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/iterator-pattern.html
https://www.cnblogs.com/onepiece-andy/p/python-iterator-pattern.html

python设计模式16-迭代器模式相关推荐

  1. [转载] Python进阶:设计模式之迭代器模式

    参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...

  2. 设计模式 with Python 9:迭代器模式

    设计模式 with Python 9:迭代器模式 我们在初学编程语言的时候,除了在诸如变量.控制流程.面向对象这些编程基础内容上会话费大量精力以外,编程语言的内建集合(Collection)或者说内建 ...

  3. 【GOF23设计模式】迭代器模式

    [GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...

  4. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  5. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  6. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  7. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  8. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  9. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  10. 每日学一个设计模式1——迭代器模式

    引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...

最新文章

  1. 怕蛇的人如何学Python?
  2. JS面向对象高级特性
  3. 如何判断应用已经安装,如何判断Service,BroastCastReceiver,ContentProvider是否存在...
  4. [C++] 我们需要掌握多少语法细节
  5. 多个数据文件 mysql_mysql多实例(多个配置文件方式)
  6. Hadoop---(2)HDFS 介绍
  7. antd下拉框联动说明
  8. 1 linux中解决文件已rm删除但空间不释放的案例
  9. pandas 学习 —— pivot table
  10. HUSTOJ SPJ 示例
  11. Java实现判断中文字符串长度
  12. linux ftp切换目录命令,linux FTP命令详解
  13. 超星PDG格式转换成PDF格式及其它格式
  14. 第五节、Vim编辑器与Shell入门
  15. 局域网服务器ie浏览器文件传输慢,Win8.1系统下局域网打开IE网页很慢如何解决...
  16. 台式计算机的硬件故障,电脑主板坏了会出现什么情况?台式机电脑主板常见故障解决方法...
  17. Flowable流程设计器的使用
  18. 设计模式之 策略模式
  19. cesium添加填充_项目中的一个关于cesium的边界线的问题
  20. android 拦截鼠标按键

热门文章

  1. 华为联手沃达丰进行5G测试 传输速度达到20Gbit/s
  2. tomcat安装成功页面翻译
  3. amazon 设计 4 vending machine
  4. Linux系统管理第1天
  5. (转)B2B2C,从营销的角度,来理解SaaS
  6. 2008哲思自由软件峰会
  7. Node.js Server
  8. RPMB原理介绍【转】
  9. 机器学习与R语言(原书第2版)》一1.4 实践中的机器学习
  10. win7 建立无线wifi执点全过程