Python设计模式之迭代器模式原理与用法实例分析


Posted in Python onJanuary 10, 2019

本文实例讲述了Python设计模式之迭代器模式原理与用法。分享给大家供大家参考,具体如下:

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

下面是一个迭代器模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——迭代器模式
迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示.
"""
#迭代器抽象类
class Iterator(object):
  def First(self):
    pass
  def Next(self):
    pass
  def Isdone(self):
    pass
  def CurrItem(self):
    pass
#聚集抽象类
class Aggregate(object):
  def CreateIterator(self):
    pass
#具体迭代器类
class ConcreteIterator(Iterator):
  def __init__(self, aggregate):
    self.aggregate = aggregate
    self.curr = 0
  def First(self):
    return self.aggregate[0]
  def Next(self):
    ret = None
    self.curr += 1
    if self.curr < len(self.aggregate):
      ret = self.aggregate[self.curr]
    return ret
  def Isdone(self):
    return True if self.curr+1 >= len(self.aggregate) else False
  def 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 = aggregate
    self.curr = len(aggregate)-1
  def First(self):
    return self.aggregate[-1]
  def Next(self):
    ret = None
    self.curr -= 1
    if self.curr >= 0:
      ret = self.aggregate[self.curr]
    return ret
  def Isdone(self):
    return True if self.curr-1<0 else False
  def CurrItem(self):
    return self.aggregate[self.curr]
if __name__=="__main__":
  ca = ConcreteAggregate()
  ca.ilist.append("大鸟")
  ca.ilist.append("小菜")
  ca.ilist.append("老外")
  ca.ilist.append("小偷")
  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()

运行结果:

Python设计模式之迭代器模式原理与用法实例分析

上面类的设计如下图:

Python设计模式之迭代器模式原理与用法实例分析

当需要对聚集有多种方式遍历时,可以考虑使用迭代器模式

迭代器模式分离了集合的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合内部结构,又可以让外部代码透明的访问集合内部的数据

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python+Wordpress制作小说站
Apr 14 Python
Python中元组,列表,字典的区别
May 21 Python
python实现简单中文词频统计示例
Nov 08 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
python函数修饰符@的使用方法解析
Sep 02 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 #Python
Python基础教程之异常详解
Jan 10 #Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 #Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 #Python
pandas ix &amp;iloc &amp;loc的区别
Jan 10 #Python
python 移动图片到另外一个文件夹的实例
Jan 10 #Python
python将处理好的图像保存到指定目录下的方法
Jan 10 #Python
You might like
星际实力自我测试
2020/03/04 星际争霸
php zend 相对路径问题
2009/01/12 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
可以将word转成html的js代码
2010/04/11 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
Vue实现购物车功能
2017/04/27 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
校园广播稿500字
2014/02/04 职场文书
经济管理专业求职信
2014/06/09 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
中标通知书格式
2015/04/17 职场文书
机器人瓦力观后感
2015/06/12 职场文书
医院见习总结
2015/06/24 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python