4.3 《硬啃设计模式》 第20章 集合访问的烦恼 - 迭代器模式(Iterator Pattern)
2013-11-10 18:42
363 查看
程序中可能会用很多方式管理集合,如数组、collection、list、hashtable等,这些集合之间进行数据交换就麻烦了,因为大家保存方式不一样。
如果规定大家都要使用hashtable,这样本来没有使用hashtable的程序将要大改!
你有什么好办法来解决这个问题?
设计分析:
集合保存的方式确实有很多,如果我们能做到不管内部怎样的保存方式,只要对外能提供一致的集合访问接口,问题就可以解决了。那应该如何定义这个对外的集合访问接口呢?
我们看看迭代器模式的类图:
说明:
1.迭代器IIterator就是这个集合访问的通用接口,该通用接口至少应具备让外部程序可遍历各元素的条件。IIterator定义了IsEnd()和Next()方法,具备了遍历的最小条件了,具体应用时可增加和修改这些方法。
2.对于某集合来说,只需要提供Iterator供外部访问,而不需要暴露集合的内部实现方式。
3.采用迭代器模式还有一个好处,就是可以提供多个迭代器供外部访问,如升序迭代器、降序迭代器、或者是具备某些筛选条件的迭代器等。
4.迭代器往往还会与组合模式配合使用,使之可以遍历树结构。
请看下一文…… 作者:张传波创新工场创业课堂(敏捷课程)讲师软件研发管理资深顾问CMMI首席专家《火球——UML大战需求分析》作者www.umlonline.org创办人
如果规定大家都要使用hashtable,这样本来没有使用hashtable的程序将要大改!
你有什么好办法来解决这个问题?
设计分析:
集合保存的方式确实有很多,如果我们能做到不管内部怎样的保存方式,只要对外能提供一致的集合访问接口,问题就可以解决了。那应该如何定义这个对外的集合访问接口呢?
我们看看迭代器模式的类图:
说明:
1.迭代器IIterator就是这个集合访问的通用接口,该通用接口至少应具备让外部程序可遍历各元素的条件。IIterator定义了IsEnd()和Next()方法,具备了遍历的最小条件了,具体应用时可增加和修改这些方法。
2.对于某集合来说,只需要提供Iterator供外部访问,而不需要暴露集合的内部实现方式。
3.采用迭代器模式还有一个好处,就是可以提供多个迭代器供外部访问,如升序迭代器、降序迭代器、或者是具备某些筛选条件的迭代器等。
4.迭代器往往还会与组合模式配合使用,使之可以遍历树结构。
请看下一文…… 作者:张传波创新工场创业课堂(敏捷课程)讲师软件研发管理资深顾问CMMI首席专家《火球——UML大战需求分析》作者www.umlonline.org创办人
相关文章推荐
- 自定义任务扩展 ANT
- p45-09
- STL 栈的使用
- bias和variance
- 11个实用的Apache .htaccess配置
- VS2008 Pocket PC 2003 SE仿真程序上网设置
- STL 队列的使用方法
- android 拍照和上传
- 统计自然语言处理的基础学习之一
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- js 获取url的request参数
- Android-ImageView显示选择本地图片或拍照
- jquery ajax
- ubuntu下navicat试用到期解决办法
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)
- Android控件之Button图片文字的混排
- Android 调用系统相机拍照保存以及调用系统相册的方法
- Android中从SD卡中/拍照选择图片并进行剪裁的方法
- 解决Python 插查 MySQL 时中文乱码问题
- 到底什么是MVC?