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赋值操作方法分享
Mar 23 Python
python中ConfigParse模块的用法
Sep 29 Python
python中使用mysql数据库详细介绍
Mar 27 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
python画图的函数用法以及技巧
Jun 28 Python
Python之指数与E记法的区别详解
Nov 21 Python
python保留小数位的三种实现方法
Jan 07 Python
Tensorflow累加的实现案例
Feb 05 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
python 将Excel转Word的示例
Mar 02 Python
使用python创建股票的时间序列可视化分析
Mar 03 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实现图片简单上传
2006/10/09 PHP
一段php加密解密的代码
2007/07/16 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
JS实现太极旋转思路分析
2016/12/09 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
django rest framework serializers序列化实例
2020/05/13 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
机械电子工程毕业生自荐信
2013/11/23 职场文书
个人工作保证书
2015/02/28 职场文书
趣味运动会加油词
2015/07/18 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
python创建字典及相关管理操作
2022/04/13 Python