`

Iterator(迭代器)---对象行为型模式

阅读更多

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

将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中。迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪当前的元素。

将遍历机制与列表对象分离使我们可以定义不同的迭代器来实现不同的遍历策略,而无需在列表接口中列举它们。

 

迭代器模式可用来:

1、访问一个聚合对象的内容而无需暴露它的内部表示。

2、支持对聚合对象的多种遍历。

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

 

迭代器模式有三个重要的作用:

1、它支持以不同的方式遍历一个集合。复杂的聚合可用多种方式进行遍历。迭代器模式使得改变遍历算法变得很容易,仅需要用一个不同的迭代器的实例代替原先的实例即可。

2、迭代器简化了聚合的接口。有了迭代器的遍历接口,聚合本身就不再需要类似的遍历接口了。这样就简化了聚合的接口。

3、在同一个聚合上可以有多个遍历。每个迭代器保持它自己的遍历状态。因此你可以同时进行多个遍历。

 

当由客户来控制迭代时,该迭代器称为一个外部迭代器,而当由迭代器控制迭代时,该迭代器称为一个内部迭代器。使用外部迭代器的客户必须主动推进遍历的步伐,显式地向迭代器请求下一个元素。相反地,若使用内部迭代器,客户只需要向其提交一个待执行的操作,而迭代器将对聚合中的每一个元素实施该操作。

如果迭代器负责遍历算法,那么将易于在相同的聚合上使用不同的迭代算法,同时也易于在不同的聚合上重用相同的算法。从另一方面说,遍历算法可能需要访问聚合的私有变量。如果这样,将遍历算法放入迭代器中会破坏聚合的封装性。

 

在遍历一个聚合的同时更改这个聚合可能是危险的。如果在遍历聚合的时候增加或删除该聚合元素,可能会导致两次访问同一个元素或者遗漏某个元素。一个简答的解决办法是拷贝该聚合,并对该聚合实施遍历,但一般来说这样做代价太高。

当插入或删除元素时,该聚合那么调整迭代器的内部状态,要么在内部的维护额外的信息以保证正确的遍历。

 

 

迭代器和聚合紧密耦合。

 

一个空迭代器是一个退化的迭代器,它有助于处理边界条件。根据定义,一个NullIterator总是已经完成了遍历,即它的IsDone操作总是返回true。

空迭代器使得更容易遍历树形结构的聚合(如复合对象)。在遍历过程中的每一节点,都可向当前的元素请求遍历其各个子节点的迭代器。该聚合元素将返回一个具体的迭代器。但叶节点元素返回NullIterator的一个实例。这就使我们可以用一种统一的方式实现在整个结构上的遍历。

 

Composite模式:迭代器常被应用到像复合这样的递归结构上。

Memento模式:常与迭代器模式一起使用。迭代器可使用一个memento来捕获一个迭代的状态。迭代器在其内部存储memento。

分享到:
评论

相关推荐

    (行为型模式) Iterator 迭代器模式

    C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载

    C#面向对象设计模式纵横谈\18 行为型模式Iterator迭代器模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不... 这是第18节:行为型模式Iterator迭代器模式

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 (Level 300)

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 (Level 300)

    c++设计模式-行为型模式-迭代器模式

    c++设计模式-行为型模式-迭代器模式;qt工程;c++简单源码;迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

    迭代器模式(Iterator Pattern)原理图

    迭代器模式(Iterator Pattern)是设计模式中的一种行为模式,它允许顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式提供了一种方法,可以顺序地访问一个聚合对象中的各个元素,而又...

    设计模式--可复用面向对象软件的基础

    5.4 ITERATOR(迭代器)——对象行为型模式 5.5 MEDIATOR(中介者)——对象行为型模式 5.6 MEMENTO(备忘录)——对象行为型模式 5.7 OBSERVER(观察者)——对象行为型模式 5.8 STATE(状态)——对象行为型模式 ...

    java设计模式--迭代器设计模式.docx

    迭代器模式 迭代器模式(Iterator Pattern)是一种...迭代器模式属于行为型模式。 介绍 意图: 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部结构。 解决: 不同的方式来遍历整个整合对象。

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

    本文实例讲述了PHP设计模式之迭代器模式Iterator。分享给大家供大家参考,具体如下: 1.概述 类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility ...

    设计模式_迭代器模式.zip

    迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。...迭代器模式属于行为型模式。 迭代器模式 java demo

    设计模式可复用面向对象软件的基础.zip

    5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象...

    设计模式--C++

    5.4 ITERATOR(迭代器)—对象行为型模式 171 5.5 MEDIATOR(中介者)—对象行为型模式 181 5.6 MEMENTO(备忘录)—对象行为型模式 188 5.7 OBSERVER(观察者)—对象行为型模式 194 5.8 STATE(状态)—对象行为型...

    【JDK1.8源码剖析】外部迭代器Iterator接口

    其迭代行为可以挂载到待比较对象的外部, 此外,外部迭代器往往用来支撑内部迭代器的实现。 注意区别于内部迭代器Iterable和枚举器Enumeration 外部迭代器的设计背后体现着迭代器设计模式的思想 (二)源码分析 该...

    Java Iterator迭代器_动力节点Java学院整理

    迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,接下来通过本文给大家分享Java Iterator迭代器_动力节点Java学院整理,需要的朋友参考下吧

    设计模式之11个行为型模式

    行为型简介职责链模式(ChainofResponsibility)命令模式(Command)解释器模式(Interpreter)迭代器模式(Iterator)中介者模式(Mediator)备忘录模式(Memento)观察者模式(Observer)状态模式(State)策略模式(Strategy)模板...

    设计模式:可复用面向对象软件的基础--详细书签版

    5.4 iterator(迭代器)—对象行为型 模式 171 5.5 mediator(中介者)—对象行为型 模式 181 5.6 memento(备忘录)—对象行为型 模式 188 5.7 observer(观察者)—对象行为型 模式 194 5.8 state(状态)...

    design-pattern-java.pdf

    自定义语言的实现——解释器模式(五) 自定义语言的实现——解释器模式(六) 迭代器模式-Iterator Pattern 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...

    软件设计师必读的书-设计模式

    5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象...

Global site tag (gtag.js) - Google Analytics