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 相关文章推荐
Python3.2模拟实现webqq登录
Feb 15 Python
Python进阶之尾递归的用法实例
Jan 31 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
Python Numpy计算各类距离的方法
Jul 05 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python怎么提高计算速度
Jun 11 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
Python实现GIF图倒放
Jul 16 Python
python如何调用php文件中的函数详解
Dec 29 Python
Python 绘制多因子柱状图
May 11 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
Python底层封装实现方法详解
2020/01/22 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
标准化管理实施方案
2014/02/25 职场文书
单位作风建设自查报告
2014/10/23 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle