设计模式14之迭代器模式
背景首先我们来看一段代码:
List
上面的代码是使用迭代器遍历List 。 我们来看看下面的遍历方法:
for (Member member : memberList) {...}
上面的遍历为直接遍历 。
直接遍历是集合直接参与的遍历的过程中 , 这里的遍历方法与集合对象的耦合性太高了 。 如果我们在直接遍历中操作集合 , 就出现操作异常 。
使用迭代器遍历 , 我们分离了集合对象与其遍历行为 , 客户端遍历集合时 , 是通过迭代器操作的 , 对客户端来说 , 隐藏了集合内部细节 。 使用迭代器遍历 , 我们在遍历集合的同时操作集合也不会有问题 。
实际上迭代器遍历就是使用了迭代器模式 。
什么是迭代器模式“
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对象中各个元素 , 而又不需暴露该对象的内部细节 。 )
”
迭代器模式主要有下面4个要素组成:
“抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口 。 具体聚合(ConcreteAggregate)角色:实现抽象聚合类 , 返回一个具体迭代器的实例 。 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口 , 通常包含 hasNext()、first()、next() 等方法 。 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法 , 完成对聚合对象的遍历 , 记录遍历的当前位置 。 ”
迭代器模式结构图如下:
文章插图
代码实现Aggregatepublic interface Aggregate {void add(Object obj);void remove(Object obj);Iterator getIterator();}
Iteratorpublic interface Iterator {Object first();Object next();boolean hasNext();}
ConcreteAggregate
文章插图
ConcreteIterator
文章插图
测试代码:
文章插图
测试结果:
聚合的内容有:微信号:Lvshen_9 头条号:Lvshen的技术小屋 CSDN:Lvshen的技术小屋 First:微信号:Lvshen_9
关于迭代器模式的思考在Java中 , 集合都提供了迭代器类 。 如果我们自己要写类似集合的聚合类时 , 我们就可以使用迭代器类 。 使用迭代器模式 , 聚合对象无需暴露内部细节可能被访问 , 这样保护了聚合对象数据的安全性 。
【设计模式14之迭代器模式】其实在Java开发中 , 你可能会使用不到迭代器模式 , 因为在Java类库中 , 需要使用迭代器模式的类库都已经提供了迭代器类 。
- 纠结|硬杠红米Note9Pro?iQOO Z1跌至1575,对比之后纠结了!
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 长安|长安傍上华为这个大腿,市值暴涨500亿!可见华为影响力之大?
- 巅峰|realme巅峰之作:120Hz+陶瓷机身+5000mAh 做到了颜值与性能并存
- 蛋壳公寓|官媒发声:绝不能让“割韭菜者”一跑了之!
- 看过明年的iPhone之后,现在下手的都哭了
- 直播销售员|石家庄桥西区插上“互联网+”智慧发展之翼
- 精英|业务流程图怎么绘制?销售精英的经验之谈
- 砍单|iPhone12之后,拼多多又将iPhone12Pro拉下水
- 报名啦!宿迁开展第五届“十大科技之星”评选