文档章节

设计模式之迭代器模式

chenxkang
 chenxkang
发布于 2017/05/04 09:55
字数 497
阅读 7
收藏 0
点赞 0
评论 0

        迭代器模式,属于行为型设计模式,用于顺序访问集合对象的元素,不关心集合对象的底层表示。

  问题描述:提供一种不一样的方式来遍历整个集合对象。

  解决方案:把在元素之间游走的责任交给迭代器,而不是聚合对象。

  结构图

  举个栗子:讲一个遍历图库的故事。。。

  我们现有一个相册,相册是许多图片的聚合物,可以通过一个迭代器来访问和遍历整个相册中的图片对象,方便我们查找和获取数据。具体实现方式如下:

  1. 新建一个抽象迭代器Iterator,声明一些操作方法。代码如下:

      

  2. 新建一个具体迭代器ConcreteIterator,实现抽象接口Iterator中的方法。代码如下:

      

  3. 新建一个抽象聚合接口Aggregate,声明一些操作方法。代码如下:

      

  4. 新建一个具体迭代器ConcreteAggregate,实现抽象接口Aggregate中的方法。代码如下:

      

  5. 迭代器的使用方式如下:

      

          

  6. 运行后的效果,如图所示:

          

  

  优点

  1. 迭代器简化了聚合类,并且增加新的聚合类和迭代器类都很方便,无需修改原有的代码;

  2. 在一个聚合上可以有多个遍历。

  缺点:聚合类和迭代器类一一对应,没增加一个聚合类就要增加一个迭代器类,类的个数会成对增加,在一定程度上增加了系统的复杂性。

 

  适用场景

  1. 访问一个聚合对象的内容而无须暴露它的内部表示;

  2. 需要为聚合对象提供多种遍历方式;

  3. 为遍历不同的聚合结构提供一个统一的接口。

© 著作权归作者所有

共有 人打赏支持
chenxkang
粉丝 1
博文 20
码字总数 19128
作品 0
杭州
程序员

暂无相关文章

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 22分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 45分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 46分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 54分钟前 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部