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 16 Python
python进程管理工具supervisor使用实例
Sep 17 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
python3.6的venv模块使用详解
Aug 01 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
python队列原理及实现方法示例
Nov 27 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
Python pip 常用命令汇总
Oct 19 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 Python
Python PIL按比例裁剪图片
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
用PHP读取IMAP邮件
2006/10/09 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
婚纱摄影师求职信
2014/03/07 职场文书
低碳生活倡议书
2014/04/14 职场文书
环保倡议书100字
2014/05/15 职场文书
学校火灾防控方案
2014/06/09 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js