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 14 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Python二维码生成识别实例详解
Jul 16 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
Python实现动态循环输出文字功能
May 07 Python
Django设置Postgresql的操作
May 14 Python
Python爬虫与反爬虫大战
Jul 30 Python
python的dict判断key是否存在的方法
Dec 09 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
Python中的tkinter库简单案例详解
Jan 22 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导出中文内容excel文件类实例
2015/07/06 PHP
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python常用小技巧总结
2015/06/01 Python
Python实现的购物车功能示例
2018/02/11 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
python 元组和列表的区别
2020/12/30 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
乐观大学生的自我评价
2014/01/10 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
大学生交通专业求职信
2014/09/01 职场文书
师德师风的心得体会
2014/09/02 职场文书
营销学习心得体会
2014/09/12 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
合作协议书格式范本
2016/03/21 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
python 判断文件或文件夹是否存在
2022/03/18 Python