首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式01——Iterator模式

定义 迭代器(Iterator模式,从其英文单词可以看出,有反复做某件事的意思。迭代器模式常用于数据集合中,对数据集合中的数据按照顺序进行遍历。...首先,我们根据List中采用的迭代器设计模式,我们需要一个集合接口Aggregate(有“使聚集”、“聚合”的意思),该集合接口中有创建迭代器接口Iterator实现类对象的抽象方法iterator,这个迭代器接口有...; /** * 测试Iterator模式的主类 * * @author jiangpingping * @date 2018/8/27 下午10:01 */ public class Main...浅析迭代器模式中的重要角色 任何模式都是前人积累下来的经验,大多数模式中都有固定的角色,使用模式的时候,可以根据固定的角色来编写代码,就可以轻松地利用上设计模式,使自己的代码更具有“可复用性”。...在本次示例中,由BookShelf扮演了这个角色,它实现类iterator方法。 迭代器设计模式UML类图 ? 为什么要使用迭代器设计模式 为什么在遍历的时候要额外引入迭代器这种复杂的模式呢?

50420
您找到你想要的搜索结果了吗?
是的
没有找到

迭代器模式(Iterator)

意图 迭代器模式是一种行为型模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。 问题 集合是编程中最常使用的数据类型之一。尽管如此,集合只是一组对象的容器而已。...解决方案 迭代器模式的主要思想是将集合的遍历行为抽取为单独的迭代器对象。 除实现自身算法外,迭代器还封装了遍历操作的所有细节,例如当前位置和末尾剩余元素的数量。...结构 迭代器(Iterator)接口声明了遍历集合所需的操作:获取下一个元素、获取当前位置和重新开始迭代等。 具体迭代器(Concrete Iterators)实现遍历集合的一种特定算法。...只是这些细节对于实际模式来说并不重要,所以我们将其省略了而已。 客户端(Client)通过集合和迭代器的接口与两者进行交互。...} 执行结果: 123456789 Straight traversal:FirstSecondThirdReverse traversal:ThirdSecondFirst 参考原文:迭代器设计模式

41720

详解设计模式-Iterator模式

Iterator模式 使用Java语言显示数组arr中的元素时,我们可以使用下面的for循环语句遍历数组。...将这里的循环遍历i的作用抽象化、通用化后形成的模式,在设计模式中称为Iterator模式Iterator模式用于在数组集合中按照顺序遍历集合。...2.示例程序(Java) 该程序实现了Iterator设计模式,其作用是将书(Book)放置到书架(BookShelf)上,并将书的名字按顺序显示出来。 2.1 类图 ?...想要遍历集合中的元素时,可以调用iterator方法来生成一个实现了Iterator接口的类的实例。 Iterator接口 该接口用于遍历集合中的元素,其作用相当于循环语句中的循环变量。...代码清单2 Iterator接口(Iterator.java) package com.yrt; public interface Iterator { public abstract boolean

57730

迭代器模式Iterator

迭代器模式Iterator) 迭代器模式Iterator)[Cursor] 意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。...应用:STL标准库迭代器实现、Java集合类型迭代器等 模式结构: ?...心得: 迭代器模式的目的是在不获知集合对象内部细节的同时能对集合元素进行遍历操作,单纯依靠集合对象内部提供遍历操作会将对象结构复杂化。另外,对象如果支持多种遍历方式,那么对象的成员函数会变得多而复杂。...解决这种问题最好的方式是将这些变化封装在一个统一的对象中——Iterator,迭代其对象提供了迭代操作所必需的基本接口:初始化、递增操作、结束条件、返回当前元素[有点类似for循环的语法元素]。...//类提前声明 template class Aggregate; //迭代器接口 template class Iterator { public:

51280

1.设计模式--迭代器模式(iterator模式)

主要的方法就是iterator,类似于ArrayList中的迭代器,返回一个迭代对象。...迭代器模式的好处就在于我们调用.iterator返回迭代器后,并不需要关心怎么实现的而且我们实际上并不是通过书架类Bookshelf进行的遍历,这样如果有一天Bookshelf中存放书的List改为数组...同时迭代器模式也将具体的实现和遍历进行了分离。 4.JDK中的迭代器模式 关于迭代遍历你是否经常在集合类中看到呢?...可以看到我们常用的集合中都使用了这种设计模式例如ArrayList,可以看到实际上使用迭代器遍历的时候,调用的是Itr类,同时Iter类中对定义了Iterator接口的方法实现实现了遍历,这样无论是什么样的集合...参考文献:《图解设计模式

29210

精读《设计模式 - Iterator 迭代器模式

Iterator(迭代器模式Iterator(迭代器模式)属于行为型模式。 意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。...这种模式和 Array.from 有点像,但其实真正的迭代器在 JS 里是 obj[Symbol.iterator](),也就是一个对象实现了 [Symbol.interator],就认为是可遍历的。...比如前端规范的 [Symbol.iterator](),或者这里定义的 CreateIterator()。 Iterator: 迭代器,定义了访问与遍历的 API。...// 定义聚合接口 interface Aggregate{ getIterator: () => Iterator } // 定义迭代器接口 interface Iterator { //...总结 迭代器模式比较好理解,这里补充几个相关设计模式: 迭代器可以和组合模式配合,在组合结构内进行递归,这样一个迭代器就可以遍历完所有组合。 可以用工厂模式 + 多态模式,实例化不同的迭代器的实例。

31410

「聊设计模式」之迭代器模式Iterator

迭代器模式 概述   迭代器模式是一种行为型设计模式,它可以帮助我们在不暴露集合底层实现的情况下,遍历集合中的所有元素。...抽象迭代器类(Iterator),定义遍历集合元素的接口,包括获取下一个元素、判断是否遍历完毕等方法。...缺点 迭代器模式的缺点如下: 迭代器模式增加了类的数量,如果需要遍历的集合比较简单,使用迭代器模式可能会增加不必要的复杂性。...模式实现 下面通过Java代码来实现一个简单的迭代器模式: 抽象聚合类 package com.example.javaDesignPattern.iterator; import java.util.Iterator...iterator = aggregate.getIterator(); while (iterator.hasNext()) { System.out.println

282132

迭代器模式 Iterator 行为型 设计模式(二十)

迭代器模式Iterator) ? 走遍天下,世界那么大,我想去看看 ?...Object数组,数组直接通过构造方法传递进去(只是为了演示学习模式,不要纠结这算不上一个容器) 提供了大小的获取方法以及获取指定下标元素的方法 尤其是实现了iterator()方法,创建一个ConcreteIterator...总结 在java中万事万物都是对象 前面的命令模式将请求转换为命令对象 解释器模式中,将语法规则转换为终结符表达式和非终结符表达式 在迭代器模式中,将“遍历元素”转换为对象 通过迭代器模式引入迭代器...,迭代器模式的比较好的做法就是Java集合框架使用的这种形式---内部类形式的内部迭代器,如果真的需要自己搞一个迭代器,建议仿照集合框架搞吧 借助于迭代器模式,如果迭代的逻辑不变,更换另外的集合实现,...原文地址:迭代器模式 Iterator 行为型 设计模式(二十)

31610

设计模式的征途—21.迭代器(Iterator模式

迭代器模式Iterator) 学习难度:★★★☆☆ 使用频率:★★★★★ 一、销售管理系统中数据的遍历 Background : M公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,...迭代器(Iterator模式:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。   2.2 迭代器模式结构 ?   ...iterator.IsLast()) { Console.Write(iterator.GetNextItem() + ",");...iterator.IsFirst()) { Console.Write(iterator.GetPreviousItem() + ",");...(1)刘伟,《设计模式的艺术—软件开发人员内功修炼之道》   (2)圣杰,《C#设计模式之迭代器模式》 作者:周旭龙 出处:http://edisonchou.cnblogs.com 本文版权归作者和博客园共有

35820

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

3.解决方案 迭代器模式:使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 , 而又不需暴露该对象的内部结构。又叫做游标(Cursor)模式 。...6.模式的组成 抽象迭代器(Iterator): 迭代器定义访问和遍历元素的接口。 具体迭代器(ConcreteIterator): 具体迭代器实现迭代器Iterator接口。...迭代器模式的缺点 由于迭代器模式将存储数据和遍历数据的职责分离, 增加新的聚合类需要对应增加新的迭代器类 ,类的个数 成对增加 ,这在一定程度上增加了系统的复杂性。...8.实现 我们直接实现spl的iterator: <?php /** * 具体迭代器(ConcreteIterator): 具体迭代器实现迭代器Iterator接口。...*/ class ConcreteIterator implements Iterator { protected $_key; protected $_collection;

36810

23种设计模式(一) —— 手写实现 Iterator模式

文章目录 一、Iterator 模式的来源 1.1 Iterator 由来 1.2 实现 Iterator Author:Gorit Date:2020/12/1 Refer:《图解设计模式》...2021年发表博文: 1/50 原文链接 —— 以及其他系列文章整合 源代码 一、Iterator 模式的来源 1.1 Iterator 由来 这是我们常见的循环遍历的方式 int[] arr...= new int[199]; for (int i=0;i<arr.length;i++) { ... } 这里的循环变量 i 的作用抽象化,通用化后形成的模式,在设计模式中称为 Iterator...模式 用于在数据集合中按照顺序遍历集合,iterator 有反复做某件事的意思,因此称为“迭代器”,所以称为 迭代器模式 1.2 实现 Iterator 我们将实现 一个将书 (Book) 放入书架(...iterator(); } Iterator 接口 package Iterator; /** * 用于遍历集合中的元素,相当于循环中的循环变量 * 以下实现了一个最简单的 Iterator 接口

25320

复习:GoF的23种设计模式iterator模式(行为型)

iterator模式(迭代器模式) 就如java集合中的iterator类似,是一种最简单也是最常用的设计模式。它可以让用户通过的特定接口轮询容器中的每一个元素,而不需要了解底层实现。...实例代码: interface Iterator { public Boolean hasNext(); public Object next(); } abstract class...Aggregate { abstract Iterator createIterator(); } class ConcreteAggregate extends Aggregate {...iterator = aggregate.createIterator(); while (iterator.hasNext()) { iterator.next...我们遍历时,只需要获取Iterator类,就可以编写一段遍历代码继而重复使用。 不管集合实现如何变化,都可以使用iterator遍历元素,不依赖于aggregate实现类。 UML类图 ?

35020

PHP设计模式之迭代器模式Iterator实例分析【对象行为型】

本文实例讲述了PHP设计模式之迭代器模式Iterator。分享给大家供大家参考,具体如下: 1.概述 类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。...3.解决方案 迭代器模式:使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 , 而又不需暴露该对象的内部结构。又叫做游标(Cursor)模式 。...6.模式的组成 抽象迭代器(Iterator): 迭代器定义访问和遍历元素的接口。 具体迭代器(ConcreteIterator): 具体迭代器实现迭代器Iterator接口。...8.实现 我们直接实现spl的iterator: <?php /** * 具体迭代器(ConcreteIterator): 具体迭代器实现迭代器Iterator接口。...*/ class ConcreteIterator implements Iterator { protected $_key; protected $_collection; public function

55510
领券