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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
从零学Python之入门(二)基本数据类型
May 25 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
使用Python的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
Python实现的简单hangman游戏实例
Jun 28 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
python中强大的format函数实例详解
Dec 05 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Django设置Postgresql的操作
May 14 Python
Python unittest discover批量执行代码实例
Sep 08 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 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之PHP语法学习笔记1
2006/12/17 PHP
PHP 日常开发小技巧
2009/09/23 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
理解javascript正则表达式
2016/03/08 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python装饰器的函数式编程详解
2015/02/27 Python
详解Python验证码识别
2016/01/25 Python
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
numpy中矩阵合并的实例
2018/06/15 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
What is view? why do we have view?
2012/06/22 面试题
自动化毕业生专业自荐书范文
2014/02/04 职场文书
企业管理标语
2014/06/10 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
goland设置颜色和字体的操作
2021/05/05 Golang
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Python各协议下socket黏包问题原理
2022/04/12 Python