Java设计模式(18)——行为模式之迭代子模式(Iterator)
一、概述
概念

UML简图


// Aggregate:聚集(集合)
角色
抽象迭代子:定义遍历元素所需要的接口
具体迭代子:实现抽象迭代子接口,保持游标
聚集/具体聚集:定义/实现创建迭代子对象的接口(返回迭代子iterator)
客户端:持有聚集及其迭代子的引用
使用场景
也即是我们所熟知的集合中的Iterator的迭代器了,假设我们没有迭代模式,那么我们可以通过for循环加索引实现ArrayList的遍历,那LinkedList呢?
对的,需要使用链表的形式:通过while加上链表的判断来遍历。迭代子模式便是将这个遍历的逻辑从中抽象出来,方便了我们的遍历,也实现了透明化
的遍历(客户端无需知道集合的内部结构)。
二、实践
这里就暂时不展开示例了,可以参考集合章节以及集合相关的源码进行参阅。
这里我们需要注意的地方就是游标的相关(为何迭代器遍历可以安全的增加与删除?这里的问题就是游标的问题)

Java设计模式(18)——行为模式之迭代子模式(Iterator)的更多相关文章
- [设计模式]迭代子模式 Iterator
迭代子模式又叫做游标cursor模式,是对象的行为模式.迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子模式被广泛的应用在Java语言的API中的几个设计模式之一.在Java ...
- [工作中的设计模式]迭代子模式Iterator
一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为lis ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- java设计模式9.备忘录模式、访问者模式、调停者模式
备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对 ...
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
- 折腾Java设计模式之状态模式
原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
随机推荐
- cmd:相关命令和笔记
(1)查看git版本:git --version (2)
- 如何理解 Learning to rank
转:http://hi.baidu.com/christole/item/23215e364d8418f896f88deb What is Rank? rank就是排序.IR中需要排序的问题很多,最常 ...
- Topic model的变种及其应用[1]
转: http://www.blogbus.com/krischow-logs/65749376.html LDA 着实 带领着 Topic model 火了一把. 但是其实我们华人世界内,也不乏 ...
- pycharm 设置字体大写和显示代码行号
打开pycharm,我们看到左边是没有行号显示的. 在工具栏中点击扳手的标志,打开. 找到 Ide-setting ——>Editor ——>Apperance ——> ...
- Swift3.0 调用C函数-_silen_name
一般情况下Swit要想调用obj-c,c或c++代码必须通过obj-c以及桥接文件才可以办到,但是使用@_silgen_name,可以对于某些简单的代码,直接跳过桥接文件和.h头文件与C代码交互. 创 ...
- iOS 人机交互指导方针(iOS Human Interface Guidelines)
iOS 人机交互指导方针(iOS Human Interface Guidelines) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名 ...
- 利用MSF批量打RMI漏洞
声明:不会Java. 参考:https://www.secpulse.com/archives/6203.html 下载mjet,https://github.com/mogwaisec/mjet 按 ...
- javascript 构造函数方式定义对象 (转载)
javascript 构造函数方式定义对象 javascript是动态语言,可以在运行时给对象添加属性,也可以给对象删除(delete)属性 <html> <head> & ...
- 自定义的打印语句NSLog在控制台输出不完整的完美解决
// 打印日志 debug #ifdef DEBUG // 调试状态, 打开LOG功能 #define APPLog( s, ... ) printf("class: <%p %s:( ...
- sql获取时间、年龄
mysql数据库获取年龄:TIMESTAMPDIFF(YEAR, [出生日期字段], CURDATE()) select * from (select name 姓名,TIMESTAMPDIFF( ...