python设计模式16-迭代器模式
1. 迭代器模式(Iterator)介绍
UML类图
角色介绍
- 抽象容器:一般是一个接口,提供一个iterator()方法。
- 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
- 抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方法remove(),
- 迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。
用途
提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示。
2. 示例
"""Iterator Pattern with Python Code
"""from abc import abstractmethod, ABCMeta# 迭代器抽象类
class Iterator(metaclass=ABCMeta):@abstractmethod def First(self):pass@abstractmethod def Next(self):pass@abstractmethod def Isdone(self):pass@abstractmethod def CurrItem(self):pass# 聚集抽象类
class Aggregate(metaclass=ABCMeta):@abstractmethod def CreateIterator(self):pass# 具体迭代器类
class ConcreteIterator(Iterator):def __init__(self, aggregate):self.aggregate = aggregateself.curr = 0def First(self):return self.aggregate[0]def Next(self):ret = Noneself.curr += 1if self.curr < len(self.aggregate):ret = self.aggregate[self.curr]return retdef Isdone(self):return True if self.curr+1 >= len(self.aggregate) else Falsedef 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 = aggregateself.curr = len(aggregate)-1def First(self):return self.aggregate[-1]def Next(self):ret = Noneself.curr -= 1if self.curr >= 0:ret = self.aggregate[self.curr]return retdef Isdone(self):return True if self.curr-1<0 else Falsedef CurrItem(self):return self.aggregate[self.curr]class Client(object):def main(self):ca = ConcreteAggregate()ca.ilist.append("1")ca.ilist.append("2")ca.ilist.append("3")ca.ilist.append("4")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())if __name__=="__main__":Client().main()
输出
# ./Iterator.py
1
2
3
4
倒序:
4
3
2
1
参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/iterator-pattern.html
https://www.cnblogs.com/onepiece-andy/p/python-iterator-pattern.html
python设计模式16-迭代器模式相关推荐
- [转载] Python进阶:设计模式之迭代器模式
参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...
- 设计模式 with Python 9:迭代器模式
设计模式 with Python 9:迭代器模式 我们在初学编程语言的时候,除了在诸如变量.控制流程.面向对象这些编程基础内容上会话费大量精力以外,编程语言的内建集合(Collection)或者说内建 ...
- 【GOF23设计模式】迭代器模式
[GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...
- python策略模式包含角色_详解Python设计模式之策略模式
虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...
- Python设计模式-装饰器模式
Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...
- Python设计模式-中介者模式
Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...
- Python设计模式-职责链模式
Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...
- Python设计模式-享元模式
Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...
- python的编程模式-Python设计模式之状态模式原理与用法详解
本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...
- 每日学一个设计模式1——迭代器模式
引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...
最新文章
- 怕蛇的人如何学Python?
- JS面向对象高级特性
- 如何判断应用已经安装,如何判断Service,BroastCastReceiver,ContentProvider是否存在...
- [C++] 我们需要掌握多少语法细节
- 多个数据文件 mysql_mysql多实例(多个配置文件方式)
- Hadoop---(2)HDFS 介绍
- antd下拉框联动说明
- 1 linux中解决文件已rm删除但空间不释放的案例
- pandas 学习 —— pivot table
- HUSTOJ SPJ 示例
- Java实现判断中文字符串长度
- linux ftp切换目录命令,linux FTP命令详解
- 超星PDG格式转换成PDF格式及其它格式
- 第五节、Vim编辑器与Shell入门
- 局域网服务器ie浏览器文件传输慢,Win8.1系统下局域网打开IE网页很慢如何解决...
- 台式计算机的硬件故障,电脑主板坏了会出现什么情况?台式机电脑主板常见故障解决方法...
- Flowable流程设计器的使用
- 设计模式之 策略模式
- cesium添加填充_项目中的一个关于cesium的边界线的问题
- android 拦截鼠标按键