一句话概括:

顺序访问集合对象的元素,不需要知道集合对象的底层表示。

补充介绍:

迭代器模式(Iterator Pattern)相信大家都已经见过不少次了,当你学习Java或者其他编程语言的开始你就会接触它,因为集合就是这种设计模式:提供一种方法顺序访问聚合对象中各个元素而又无需暴露该对象的内部表示。

这种模式将元素之间的游走交给迭代器,而不是具体的聚合对象。从而达到一种低耦合目的。

关键接口有:hasNext() 判断是否还有下一个元素, next() 下一个元素对象

参与角色:

1)聚合类(容器类)接口

2)具体的容器类

3)Iterator接口

4)Iterator实现类

5)元素类

优点:

1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点:

由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

使用案例或场景:

使用场景:需要遍历聚合类

案例:Java集合框架:List, Set, Map 都支持迭代

示例程序

需要源码的朋友可以前往github下载:

程序简介:

我们将创建一个叙述导航方法的 Iterator 接口和一个返回迭代器的 Container 接口。实现了 Container 接口的实体类将负责实现 Iterator 接口。

IteratorPatternDemo,我们的演示类使用实体类 NamesRepository 来打印 NamesRepository 中存储为集合的 Names。

代码:

public interface Iterator {

public boolean hasNext();

public Object next();

}

public interface Container {

public Iterator getIterator();

}

public class NameRepository implements Container {

public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

@Override

public Iterator getIterator() {

return new NameIterator();

}

private class NameIterator implements Iterator {

int index;

@Override

public boolean hasNext() {

if(index < names.length){

return true;

}

return false;

}

@Override

public Object next() {

if(this.hasNext()){

return names[index++];

}

return null;

}

}

}

public class IteratorPatternDemo {

public static void main(String[] args) {

NameRepository namesRepository = new NameRepository();

for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){

String name = (String)iter.next();

System.out.println("Name : " + name);

}

}

}

输出结果:

Name : Robert

Name : John

Name : Julie

Name : Lora

参考:

《迭代器模式》菜鸟教程网站

java迭代器的使用场景_集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示...相关推荐

  1. 消息中间件的应用场景与 RabbitMQ的六种工作模式介绍

    消息中间件的应用场景与 RabbitMQ的六种工作模式介绍 消息中间件应用场景 异步处理 应用解耦 流量削峰 RabbitMQ的六种工作模式 简单模式 工作模式 发布订阅模式 路由模式 主题模式 PR ...

  2. java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...

    写在前面:设计模式源于生活,而又高于生活! 为什么要使用设计模式重构代码 使用设计模式可以重构整体架构代码.提高代码复用性.扩展性.减少代码冗余问题. Java高级工程师装逼的技能! 什么是策略模式 ...

  3. Java中常用集合类对比_集合比较

    集合实现类 集合接口 有序性 唯一性 线程安全 空值 性能 排序 数据结构 索引 应用场景 备注 ArrayList List 有序 可重复 不安全 允许空值 查找效率高,添加/删除效率低 使用 Co ...

  4. python集合类型应用场景_简述Python的深浅拷贝以及应用场景

    原博文 2019-07-16 11:54 − Python的深浅拷贝以及应用场景 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.dee ...

  5. lua java 结合 场景_【转】说下lua使用场景

    [今日话题]说下lua使用场景 – flea 1. 我们有用,一些逻辑相对简单,没有复杂的数据交互,访问频次超高的接口实现,可以用lua,省得用phpfpm,太重,浪费资源. – 付坤 2. 也可以拿 ...

  6. java开发微信抢红包挂_「高并发秒杀」微信抢红包实战案例

    推荐阅读: ( i' [9 Q6 ?7 K/ p+ B% ~ 8 L$ _" R- y- v  s1 p. e7 Y( }* M, l6 T+ R 阿里二面凉经:设计模式+缓存+Spring ...

  7. ue4怎么用虚幻商城场景_【更新】UE4虚幻引擎野外场景制作零基础入门教程

    原标题:[更新]UE4虚幻引擎野外场景制作零基础入门教程 作为一套零基础入门教程,可以帮助虚幻4引擎的新手了解到环境制作流程和相关软件的配合.本教学适合零基础入门用户,不适合有一定经验的UE使用者. ...

  8. python深拷贝和浅拷贝的使用场景_深拷贝、浅拷贝的理解与使用场景

    什么是深拷贝.浅拷贝? 通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝 区别点: 深拷贝会创建一个新的内存空间,拷贝的值是一样的,但是内存地址不一样. 浅拷贝只是拷贝指向原来对象的地址,使原对象的引用计 ...

  9. java语言描述一个行为_设计模式之责任链模式——Java语言描述

    责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不 ...

最新文章

  1. 使用java9的uuid生成方式,让uuid生成速度提升一个档次...
  2. 简单理解Python中的if __name__ == '__main__'
  3. oracle 常见操作
  4. 【机器视觉】 dev_clear_obj算子
  5. 邮件发送类,支持Gmail
  6. 数据结构---BF字符串模式匹配
  7. 反转map的key-value
  8. VS2010上连接SQLite数据库
  9. ScrollView常用属性汇总
  10. 【Python学习】pandas 删除重复行
  11. java 的安全管理器
  12. matlab 高精度无理数,如何从MatLab上的无理数产生近似分数?
  13. 论文阅读笔记:A Network-based End-to-End Trainable Task-oriented Dialogue System
  14. A - 娜娜梦游仙境系列——诡异的钢琴
  15. 8月英语——知耻而后勇
  16. Python+Appium+夜神模拟器 全流程从环境搭建到实现自动化(APP自动化)
  17. 软考中级 真题 2018年上半年 信息系统管理工程师 基础知识
  18. 冬至了,该盘点盘点2021年中国企业服务产业了
  19. Linux运维工程师学习目标
  20. Debian11之 RKE2 部署 K8S 集群

热门文章

  1. 响应用户呼声 币安更正BCH简称
  2. BCH网络升级顺利完成,将创新和开发推向新高度
  3. .NET Core微服务之路:不断更新中的目录 (v0.42)
  4. 区块链开发公司能做什么?对企业未来市场有何帮助?
  5. nodejs中服务器返回响应信息中的中文乱码
  6. Javascript 上课笔记
  7. GP通过外部表装载数据时遇到ERROR:extra data after last expected column解决方法
  8. 前端开发我为什么选择cordova
  9. ipmsg 绑定tcp错误
  10. 快排--java实现