设计模式——迭代器模式

举报
yd_221104950 发表于 2020/12/03 00:39:53 2020/12/03
【摘要】 当我们说“集合(collection)”的时候,我们指的是一群对象。其存储方式是各式各样的数据结构,如列表、数组、散列表,无论用什么方式存储,一律可以视为集合。 迭代器模式定义 提供一种方法顺序访问一个集合对象的各个元素,而又不暴露其内部的表示。 这个模式给我们提供了一种方法,可以顺序访问一个集合对象中的元素,而又不用知道内部是如何表示的。 类图: Itera...

当我们说“集合(collection)”的时候,我们指的是一群对象。其存储方式是各式各样的数据结构,如列表、数组、散列表,无论用什么方式存储,一律可以视为集合。

迭代器模式定义

提供一种方法顺序访问一个集合对象的各个元素,而又不暴露其内部的表示。

这个模式给我们提供了一种方法,可以顺序访问一个集合对象中的元素,而又不用知道内部是如何表示的。

类图:
在这里插入图片描述
Iterator是所有迭代器都必须实现的接口,Java中也提供了Iterator接口,如果不想用Java提供的,自己设计一个也是可以的。在这里我自己设计了一个迭代器接口,里面有方法hasMore()、next()。
ConcreteIterator是具体的迭代器,负责管理目前遍历的位置。
Aggregate有一个共同的接口供所有的集合使用,这对客户代码是很方便的,将客户代码从集合对象的实现中解耦了。
ConcreteAggregate这是一个具体的持有一个对象的集合,并实现一个方法,利用此方法返回集合的迭代器。

像ArrayList、Vector、LinkedList、Stack、PriorityQueue这些类都实现了java.util.Collection接口。而每个Collection都知道如何创建自己的iterator。如ArrayList上的iterator()方法就可以返回一个具体的Iterator,而你根本不需要去知道它到底做了什么,只要使用Iterator接口就可以了。

使用迭代器可以让你很方便地遍历对象。这一点我觉得没有太多人有同感,因为java在很多集合类上都内置实现了迭代器设计模式,大家用得很多,没有对比过没有迭代器的情况,自然也没有什么感觉了。下面这个demo从头带你走过没有内置迭代器的日子,谢谢。

迭代器设计模式的demo已上传GitHub,欢迎下载学习

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/88846526

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。