文档章节

设计模式之迭代器模式

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

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

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

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

  结构图

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

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

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

      

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

      

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

      

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

      

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

      

          

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

          

  

  优点

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

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

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

 

  适用场景

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

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

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

© 著作权归作者所有

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

暂无文章

20个使用 Java CompletableFuture的例子

https://colobu.com/2018/03/12/20-Examples-of-Using-Java%E2%80%99s-CompletableFuture/

lemos
38分钟前
1
0
Apache 流框架 Flink,Spark Streaming,Storm对比分析

1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理...

hblt-j
42分钟前
1
0
什么是公网IP、内网IP和NAT转换?

搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么? 1、引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网I...

linuxprobe16
48分钟前
1
0
Spring Cloud搭建微服务架构----流量回放

前言 系统微服务化后,传统的自测/测试方式都变得比较困难: 依赖的服务可能不稳定。 服务无法提供期望的响应数据。 缺少场景构造标准。 随着整体业务越来越复杂,微服务依赖的越来越多,测试...

春哥大魔王的博客
今天
4
0
记一次springboot模块配置问题导致读取Apollo配置中心配置文件始终错误的问题

现在正在做的一个项目采用的是微服务,主框架是spring cloud,配置中心用的是携程的Apollo。 项目下有多个服务,在测试服务器上启动用户服务的时候发现在eureka中心另一个服务被启动了,尝试...

zcqshine
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部