Java 设计模式之【迭代器】学习与掌握
文章目录
- 定义
- 优点
- 缺点
- 模式的结构与实现
- 模式的结构
- 模式的实现
- 应用场景
定义
- 提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
迭代器模式是一种对象行为型模式
优点
- 遍历任务交由迭代器完成,这简化了聚合类。
- 访问一个聚合对象的内容而无须暴露它的内部表示。
- 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
- 封装性良好,为遍历不同的聚合结构提供一个统一的接口。
- 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
缺点
- 增加了类的个数,这在一定程度上增加了系统的复杂性。
模式的结构与实现
迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。
模式的结构
有下面 4 个角色:
- 【抽象聚合角色】定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
- 【具体聚合角色】实现抽象聚合类,返回一个具体迭代器的实例。
- 【抽象迭代器角色】定义访问和遍历聚合元素的接口,通常包含
hasNext()
、first()
、next()
等方法。 - 【具体迭代器角色】实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
模式的实现
- 【抽象迭代器】,代码如下:
package com.example.designmodedemo.principle.iterator;/*** 抽象迭代器*/
public interface Iterator {Object first();Object next();boolean hasNext();}
- 【具体迭代器】,代码如下:
package com.example.designmodedemo.principle.iterator;import java.util.List;/*** 具体迭代器*/
public class MyIterator implements Iterator{private List<Object> list = null;private int index = -1;public MyIterator(List<Object> list) {this.list = list;}@Overridepublic Object first() {index = 0;if (list != null){return list.get(index);}return null;}@Overridepublic Object next() {if (list != null){return list.get(++index);}return null;}@Overridepublic boolean hasNext() {if (list != null){if (index < list.size() - 1){return true;}}return false;}
}
- 【抽象聚合角色】,代码如下:
package com.example.designmodedemo.principle.iterator;/*** 抽象聚合接口*/
public interface Aggregate {public void add(Object object);// 新增元素public void remove(Object object);// 移除元素public Iterator getIterator();// 获取迭代器}
- 【具体聚合角色】,代码如下:
package com.example.designmodedemo.principle.iterator;import java.util.ArrayList;
import java.util.List;/*** 具体聚合对象*/
public class MyAggregate implements Aggregate {private List<Object> list = new ArrayList<>();@Overridepublic void add(Object object) {list.add(object);}@Overridepublic void remove(Object object) {list.remove(object);}@Overridepublic Iterator getIterator() {return (new MyIterator(list));}
}
- 【客户端】,调用代码如下:
/*** 迭代器模式*/private void principle_aggregate() {// 创建聚合对象,并添加元素Aggregate myAggregate = new MyAggregate();myAggregate.add("刺客信条 奥德赛");myAggregate.add("荒野大镖客2");myAggregate.add("巫师3");System.out.println(":> 聚合对象中内容如下:");// 获取迭代器对象,并遍历迭代器打印每一个元素内容Iterator myIterator = myAggregate.getIterator();while (myIterator.hasNext()){Object obj = myIterator.next();System.out.print(obj.toString() + "\t");}// 使用迭代器获取第一个元素Object firstObj = myIterator.first();System.out.println("\n:> First element is : " + firstObj.toString());}
- 【运行结果】,如下图示:
应用场景
- 当需要为聚合对象提供多种遍历方式时。
- 当需要为遍历不同的聚合结构提供一个统一的接口时。
- 当访问一个聚合对象的内容而无须暴露其内部细节的表示时。
技术永不眠!我们下期见!
Java 设计模式之【迭代器】学习与掌握相关推荐
- 【Java设计模式】迭代器模式
迭代器模式 1.概述 定义: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示. 2.结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储.添加.删 ...
- Java 设计模式之迭代器模式
一.了解迭代器模式 1.1 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和 ...
- Java设计模式之迭代器模式
迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对 ...
- 迭代器 java_百战程序员:Java设计模式之迭代器模式
迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对 ...
- JAVA设计模式什么鬼(迭代器)——作者:凸凹里歐
方法迭代,代的更迭,从初代到末代的遍历,指对某类集合中的每个元素按顺序取出的行为.举个例子,通常我们读小说是从前往后翻,一页接着一页地读,这样我们才可以了解一个连续完整的故事,那这就需要我们顺序地迭代 ...
- Java设计模式中组合模式是什么/树形结构怎么组合或显示存储,编程怎么实现树形结构
继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 5.7 组合模式 5.7.1 概述 又名整体模式,是用于把一组相似的对象当作一个单一的对象 依据树形结构 ...
- Java设计模式-中介模式/中介模式具体怎么使用,使用场景又是什么
继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 6.8 中介者模式 6.8.1 定义 调停模式,定义一个中介角色来封装一系列对象的之间交互,使元有对象之 ...
- Java设计模式——迭代器模式
概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个 ...
- Java - 设计模式学习总结
熟练掌握各种设计模式,并能在实际编程开发中灵活运用它们,不仅能使代码更规范,重用性更高,同时也能保证代码的可靠性,提高开发效率.这段时间又系统看了设计模式的相关内容,整理学习总结如下,文中内容如有表达 ...
- JAVA设计模式(21):行为型-迭代器模式(Iterator)
20世纪80年代,那时我家有一台"古老的"电视机,牌子我忘了,只记得是台黑白电视机,没有遥控器,每次开关机或者换台都需要通过电视机上面的那些按钮来完成,我印象最深的是那个用来换台的 ...
最新文章
- 图像配准----SIFT
- mysql判断是否建立索引_判断mysql中列是否要添加索引的标准
- LDAP-轻量级目录访问协议(统一认证)
- 奥的斯服务器显示chc,奥的斯服务器查看故障清除故障
- 华为今年不发布Mate系列新机;一加宣布与OPPO合并:将成为OPPO旗下独立品牌;Gradle 7.1 发布|极客头条...
- “无代码”来了,还要程序员干嘛?
- PAT 1066. 图像过滤(15)-乙级
- 懒惰是人类进步的动力,勤奋是实现偷懒的途径
- exec调用oracle,exec 和 call 用法详解
- UISegmentedControl
- taskfactory默认执行慢的问题
- eBay把平台更新为Kubernetes、Envoy和Kafka:计划开源硬件和软件
- intellij idea设置主题、字体样式和背景色
- 方维团购V3.07版本短信接口开发
- 什么是Handler
- 6612345免费网页打印浏览器
- Linux发行版本及其区别
- VSPD虚拟串口工具无法删除添加的虚拟串口
- 快捷下载中国原创音乐基地音乐(包括金豆和无法下载音乐)
- 导航网站合集|高效工作学习