文档章节

小菜学设计模式——迭代器模式

learn_more
 learn_more
发布于 2015/06/18 11:44
字数 685
阅读 148
收藏 5

背景

    迭代就是遍历的一个过程,既然是遍历自然是无处不在,比如说,在大街上看美女的时候,总是一个也不放过,一个个尽收眼底,不过,说实话,夏天看美女,其实我是拒绝的,不说了,鼻血有要留出了


1、使用意图

    遍历每一个对象


2、生活实例

    公交车上的售票员查票,对每一个乘客都进行查票,验票。


3、Java 例子(框架、JDK 、JEE)

    集合的顶层接口Collection就是实现了接口Iterable,他就是一个迭代器模式的封装,Iterable只有一个方法,Iterator<T> iterator(); 然而Iterator声明了对应迭代的方法,就是如下:

boolean hasNext();E next();void remove();

其实,我们不管是使用Map还是List,有时候都会去遍历是删除成员,这个时候迭代器是最好的,因为普通的For是不能在迭代中删除成员的。


4、模式类图

Aggregate:抽象成员角色,他就是遍历的对象成员

ConcreteAggregate:具体成员角色,对Aggregate的具体实现,其实聚集对象就是集合或说数组

Iterator:抽象迭代器,他声明迭代的工具方法

ConcreteIterator:具体迭代器,他实现迭代的工具方法,可以有各种不同的遍历实现


5、模式优点

    迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

    当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。

    当你需要对聚集对象有多种方式遍历时可以考虑使用迭代器模式。

    为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。

    迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合内部结构,又可以外部代码透明地访问集合内部数据


6、与类似模式比较

    看完这个设计模式,感觉到迭代器模式神乎其神了,这个模式确实是无处不在啊,而且Java中for 循环就是一个体现,遍历是多样话的,但是迭代器模式确实就是当中一个原理。

        


© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei
2018/05/26
0
0
《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方...

嗨呀豆豆呢
2018/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 二

Partitioning(分区) 对于非常大的数据集,或非常高的吞吐量,仅复制是不够的:我们需要将数据进行分区(partitions),也称分片(sharding) Partitioning of Key Range(根据键范围分区) 缺点是某...

丰田破产标志
5分钟前
0
0
springboot2+logback将日志输出到oracle数据库的踩坑之旅

背景 根据本人写博客的惯例,先交代下背景。在公司的系统中,我们的配置文件是切分有好几个的,不同的配置文件里面配置内容有着不同,对于日志的输出,也需要对不同的环境做出不同的输出,这...

succy
8分钟前
0
0
记一次临近上线程序发生OOM

记一次临近上线程序发生OOM 故事背景 最近一直在赶着应用上线,基本已经封包准备上线了,谁都不想在这时间点上出差错~ 当时应用已经上线pre,压力测试已经通过,然而昨天下午测试组的同事突然找到...

黑搜丶D
20分钟前
0
0
微服务概念与入门

总体 微服务拆分 康威定律详细介绍 Mike从他的角度归纳这篇论文中的其他一些核心观点,如下: 第一定律:Communication dictates design(组织沟通方式会通过系统设计表达出来) 第二定律:T...

之渊
28分钟前
0
0
BlockLang 0.3.0 发布啦

BlockLang 官网:https://blocklang.com Block Lang 0.3.0 引入一个新概念:组件市场。 拼装软件时使用的零部件统称为组件。所有组件在组件市场中统一管理,包括 Block Lang 的内置组件。 组...

blocklang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部