`

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#中,迭代器模式的应用广泛且重要,尤其对于集合类的遍历操作至关重要。本文将深入...

    设计模式(C#)之迭代器模式(Iterator Pattern)

    迭代器模式是软件设计模式中的一种行为模式,它在C#等面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户遍历一个聚合对象(如数组、集合或列表)的所有元素,而无需了解底层的实现细节。下面将详细...

    设计模式之迭代器模式(Iterator)

    迭代器模式是软件设计模式中的一种行为模式,它在编程中扮演着重要的角色,尤其是在处理集合数据时。迭代器模式的核心思想是提供一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式使得用户可以在不...

    iterator-demo 迭代器设计模式demo

    迭代器设计模式是一种常用的行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。这个“iterator-demo”应该是一个示例项目,用于演示如何在实际编程中应用迭代器模式。下面我们将深入...

    【Java设计模式】(1)迭代器模式Iterator

    迭代器模式(Iterator Pattern)是Java设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过...

    【IT十八掌徐培成】Java基础第10天-04.List-迭代器-对象等价性.zip

    2. **迭代器(Iterator)**:在Java中,迭代器是一种设计模式,用于遍历集合中的元素,提供了`hasNext()`方法检查是否还有下一个元素,以及`next()`方法获取下一个元素。迭代器模式使得代码对具体的集合实现细节透明...

    23钟设计模式之迭代器模式模式

    迭代器模式是23种设计模式之一,属于行为型模式。它提供了一种访问聚合对象元素的方式,而不需要暴露该对象的内部实现。迭代器模式的主要目的是让开发者能够轻松地遍历聚合对象中的元素,而不需要关心对象的内部实现...

    设计模式专题之(二十三)迭代器模式---设计模式迭代器模式示例代码(python--c++)

    `__iter__()`返回迭代器对象本身,`__next__()`返回下一个元素,当没有更多元素时抛出`StopIteration`异常。 以下是一个简单的Python迭代器模式示例: ```python class Collection: def __init__(self, elements)...

    IteratorPattern 迭代设计模式

    迭代器模式(IteratorPattern)是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象元素的方法,同时又不暴露其底层表示。这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象...

    设计模式C++学习之迭代器模式(Iterator)

    迭代器模式是软件设计模式中的行为模式之一,它在C++编程中有着广泛的应用。这个模式提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。通过迭代器,用户可以遍历集合中的所有元素,而无需知道如何...

    迭代器模式Demo

    - **分离了遍历行为和聚合对象**:迭代器模式使得聚合对象和遍历它的方法解耦,使得两者可以独立变化。 - **支持多种遍历方式**:可以通过定义不同类型的迭代器来支持多种遍历策略。 - **提供了更安全的访问方式**:...

    设计模式-迭代器模式(讲解及其实现代码)

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式允许我们遍历集合中的每个元素,同时保持集合本身抽象,不需了解其内部结构。 在Java、C#等面向对象语言...

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

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

    Android设计模式之--迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它在Android开发中被广泛应用,尤其是在处理集合对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java或Android编程中,...

    C++设计模式课件21_Iterator_迭代器.pdf

    迭代器模式(Iterator Pattern)属于行为型设计模式之一,它的主要目的是为集合对象提供一种方法,以便能够顺序地访问其元素,而无需暴露集合的内部结构。通过这种方式,可以将迭代行为从集合类中分离出来,使得集合...

    设计模式--迭代器模式java例子

    迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如ArrayList、LinkedList等。本示例将深入探讨如何在Java中实现和使用迭代器...

    迭代器模式代码示例

    迭代器模式是一种设计模式,属于行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以...

Global site tag (gtag.js) - Google Analytics