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 相关文章推荐
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Python进行特征提取的示例代码
Oct 15 Python
python实现图片批量压缩
Apr 24 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
PHP+DBM的同学录程序(2)
2006/10/09 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
JavaScript知识点整理
2015/12/09 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Python简明入门教程
2015/08/04 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
struct和class的区别
2015/11/20 面试题
销售副总经理岗位职责
2013/12/11 职场文书
装饰资料员岗位职责
2013/12/30 职场文书
优秀交警事迹材料
2014/01/26 职场文书
十八届三中全会感言
2014/03/10 职场文书
调查研究项目计划书
2014/04/29 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL