迭代器模式之看芒果台还是央视nie?

”大风车吱呀吱悠悠的转,这里的风景啊真好看,天好看,地好看,还有一群快乐的小伙伴,大风车转呀转悠悠,快乐的伙伴手牵着手,牵着你的手,牵着我的手......“童年的美好时光因为有了《动画城》的陪伴而倍感幸福,那个时候,家里有一台古董式的电视机,是一台黑白电视机,转台的时候需要通过电视机上面的那些按钮来完成,也就是换台的按钮,但是并不是每次都那么幸运,可以准时收看我喜欢的儿童节目,有时候出现一片白茫茫的雪花点儿,剩下的就只是郁闷了。就这样,动画片稳稳的托住了我童年的欢乐。

随着科技的飞速发展,各种电视机可谓是百家争鸣,百花齐放,三星SAMSUNG ,索尼SONY液晶电视 ,海信Hisense液晶电视等,让你眼花缭乱,而那些黑白的电视机慢慢淡出我们的视线,归隐山林,与那时的电视机相比,现今的电视机给我们带来的最大便利之一就是增加了电视机遥控器,我们在进行开机、关机、换台、改变音量等操作时都无须直接操作电视机,可以通过遥控器来间接实现。我们可以将电视机看成一个存储电视频道的集合对象,通过遥控器可以对电视机中的电视频道集合进行操作,如返回上一个频道、跳转到下一个频道或者跳转至指定的频道。遥控器为我们操作电视频道带来很大的方便,用户并不需要知道这些频道到底如何存储在电视机中。

今天我们的设计模式就从电视机遥控器开始说起,在软件开发中,也存在大量类似电视机一样的类,它们可以存储多个成员对象,这些类通常称为聚合类(Aggregate Classes),对应的对象称为聚合对象。为了更加方便地操作这些聚合对象,同时可以很灵活地为聚合对象增加不同的遍历方法,我们也需要类似电视机遥控器一样的角色,可以访问一个聚合对象中的元素但又不需要暴露它的内部结构。首先我们来看一下迭代器模式的结构图;

对上述结构图进行一些解释:

Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的next()方法,用于判断是否还有下一个元素的hasNext()方法,用于获取当前元素的currentItem()方法等,在具体迭代器中将实现这些方法。

ConcreteIterator(具体迭代器):它实现了抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置,在具体实现时,游标通常是一个表示位置的非负整数。

Aggregate(抽象聚合类):它用于存储和管理元素对象,声明一个createIterator()方法用于创建一个迭代器对象,充当抽象迭代器工厂角色。

ConcreteAggregate(具体聚合类):它实现了在抽象聚合类中声明的createIterator()方法,该方法返回一个与该具体聚合类对应的具体迭代器ConcreteIterator实例。

在迭代器模式中,提供了一个外部的迭代器来对聚合对象进行访问和遍历,迭代器定义了一个访问该聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有。迭代器的引入,将使得对一个复杂聚合对象的操作变得简单。

迭代器模式遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。

迭代器模式之看芒果台还是央视nie?

时间: 2024-10-13 00:32:45

迭代器模式之看芒果台还是央视nie?的相关文章

设计模式之迭代器模式解析学习源码(十八)

原文献上, 点击滴滴滴 迭代器模式(Iterator)定义: 提供一种方法顺序访问聚合对象的各个元素吗而又不暴露该对象的内部展示 不用Iterator的坏处 原文中编写了三个简单的集合 ArraryList HashSet LinkedList 原先是没有实现Iterable 内部没有具体实现iterator 问题1: 遍历的时候遍历了几次 使用数组遍历的时候实际是遍历了两次, 由于System.arrayCopy 和 set的 toArray 看不到源码, 但是LinkedList 可以看到链

设计模式之三:迭代器模式(IteratorPattern)

迭代器(Iterator)模式,又叫游标(Cursor)模式.其定义为:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节.迭代器模式是和容器相关的,对容器对象的访问设计到遍历算法. 迭代器模式由以下角色组成: 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口. 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并记录遍历中的当前位置. 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口. 具体容器

设计模式之第6章-迭代器模式(Java实现)

设计模式之第6章-迭代器模式(Java实现) “我已经过时了,就不要讲了吧,现在java自带有迭代器,还有什么好讲的呢?”“虽然已经有了,但是具体细节呢?知道实现机理岂不美哉?”“好吧好吧.”(迭代器闷闷不乐的答应下来.作者吃着小笼包,咂咂嘴道:哼,想偷懒,窗户都没有~). 迭代器模式之自我介绍 正如你们所见,我目前已经没落了,基本上没人会单独写一个迭代器,除非是产品性质的研发,我的定义如下:Provide a way to access the elements of an aggregate

23种设计模式中的迭代器模式

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个对象. 那么如何提供一个方法顺序呢? public interface Iterator<T>{ public boolean hasNext(); public T next(); } public class XXX{ private List<XXX> list =new ArrayList<>(); public Iterator getIterator (){ return new XXXIterator()

设计模式——迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示.       把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所       提供一种可以遍历聚合对象的方式,又称为:游标cursor模式       聚合对象:存储数据       迭代器:遍历数据       JDK内置iterator  正向迭代  反向迭代       设计原则:一个类应该只有一个引起变化的原因. 看一个简单的迭代器模式Demo

php设计模式之迭代器模式

今天的PHP设计模式系列的主角是迭代器(Iterator)模式,迭代器模式提供了抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代. 迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代.迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代. 在对象的世界里,迭代器模式要维持类似数组的功能,看作是一个非侵入性对象刻面(facet),Client类往往分离自真实对象实现,指iterator接口

迭代器模式的一种应用场景以及C#对于迭代器的内置支持

迭代器模式 先放上gof中对于迭代器模式的介绍镇楼 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示. 别名 游标(Cursor). 动机 一个聚合对象, 如列表(list), 应该提供一种方法来让别人可以访问它的元素,而又不需暴露它的内部结构. 此外,针对不同的需要,可能要以不同的方式遍历这个列表.但是即使可以预见到所需的那些遍历操作,你可能也不希望列表的接口中充斥着各种不同遍历的操作.有时还可能需要在同一个表列上同时进行多个遍历.迭代器模式都可帮你解决所有这些

JAVA设计模式之 迭代器模式【Iterator Pattern】

一.概述 提供一种方法来访问聚合对象(容器container),而不用暴露这个对象的内部细节. 二.适用场景 1>遍历访问聚合对象中的元素,而无须暴露它的内容表示,将聚合对象的访问和内部数据的存储分离.使得访问聚合对象时无须了解其内部的实现细节. 2>需要为一个聚合对象提供多种遍历实现. 三.UML类图 四.参与者 1>Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的next()

第 14 章 迭代器模式【Iterator Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 周五下午,我正在看技术网站,第六感官发觉有人在身后,扭头一看,我C,老大站在背后,赶忙站起来, “王经理,你找我?” 我说. “哦,在看技术呀.有个事情找你谈一下,你到我办公室来一下.” 老大说. 到老大办公室, “是这样,刚刚我在看季报,我们每个项目的支出费用都很高,项目情况复杂,人员情况也不简单,我看着 也有点糊涂,你看,这是我们现在还在开发或者维护的103 个项目,你能不能先把这些项目信息重新打印一份 给我,咱们好查查到