设计模式之迭代器模式

Java36

本文介绍设计模式中的迭代器模式,首先通俗的解释迭代器模式的基本概念和对应的四个角色,并根据四个角色举一个典型的实例,为了加强知识的连贯性,我们以Jdk源码集合中使用迭代器模式的应用进一步说明,最后说明迭代器模式的应用场景和优缺点。

读者可以拉取完整代码本地学习,实现代码均测试通过上传到码云

一、概念理解

迭代器模式的官方解释是提供一个对象来顺序访问聚合对象中的一系列数据,而不公开聚合对象的内部表示。聚合对象是什么?最典型的是集合类。

[En]

The official interpretation of the iterator pattern is to provide an object to access a series of data in the aggregate object sequentially without exposing the internal representation of the aggregate object. What is the aggregate object? The most typical is the collection class.

换句话说,集合中的数据是私有的,集合不应该提供直接遍历方法,来定义访问集合的新对象。

[En]

In other words, the data in the collection is private, the collection should not provide a direct traversal method, to define a new object to access the collection.

由于它是专用于遍历的对象,即被遍历的聚合对象,因此显然至少有两个对象,迭代器对象和聚合对象,因为它们遵循面向接口的编程原则。迭代器对象和聚合对象应该从接口中抽象出来,因此自然应该有四个角色:

[En]

Since it is an object dedicated to traversal, a traversed aggregate object, it is obvious that there are at least two objects, the iterator object and the aggregation object, because they follow the principle of interface-oriented programming. Iterator objects and aggregation objects should be abstracted out of the interface, so naturally there should be four roles:

抽象聚合(InterfaceAggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。

具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。

抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。

具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

变量、常量、作用域(Java)

基本介绍 1.变量 定义:可以变化的量 2.变量声明 Java是一种强制类型语言,每一个变量必须声明类型 3.变量名,变量类型和作用域 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型...
Java

feignclient各种使用技巧说明

常规的FeignClient的创建与使用我相信只要使用过spring cloud全家桶的套件的基本上都是非常熟悉了,我们只需定义一个interface,然后定义相关的远程接口方法签名及在方法上标记相关...
Java

Java8 提供的流式操作

参考资料 流式操作 Stream 代表一个支持串行或并行聚集操作的元素序列。 filter filter 生成一个新的 Stream,该 Stream 所有元素都满足 predicate.test =...
Java

设计模式之代理模式

本文由老王出租房子引出——代理设计模式,将从最简单的静态代理实现开始,后延伸使用jdk实现动态代理,最后扩展到Cglib实现动态代理。为了更深入理解代理模式,我们会对实际应用中的典型案例进行介绍,包括...
Java

SQL

1.between匹配 包含min和max值 count(*) 计算时会包括null值,而count(column)则会忽略null值。 检验是否含有null值需要使用is null。 3.使用聚集函...
Java

后端接口对接注意事项

后端接口对接的模式范本: 概念澄清: 【下单】是个广义上的叫法,并不仅限于支付订单的订单。因为整个过程都围绕一个【seqNo】订单号或流水号这个唯一标识展开,因而统称【下单】。 【下单】可用于分发优惠...
Java

mybatis配置解析

一.引言:参考官方文档mybatis中提供了如下的配置,其中标红的需要掌握,其余的作为了解即可 二:配置解析之前的环境准备:进行配置之前要先有这几个东西,包括数据库表、Mybatis全局配置文件、实体...