就Java 开发者而言,Iterator 应该是比较容易理解的模式了。 因为用过Java 集合的人会记得有iterator() 这个函数。应用iterator() 返回Iterator 对象,然后对相应的集合元素进行操作,这就是经典的Iterator 的用法。(当然,Iteartor 还涉及另外一个模式,Factory, 这在之前已经讲过)。
在基本的Iterator 模式的定义里是这样讲的:“Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. ” 。 这里有两点:
1。访问聚合的对象( aggregate object),比如集合
2。不暴露内部细节( exposing its underlying representation.)
基本的模式图:
对于这个模式,本身的思想似乎没有什么可说的。但是有几点具体实现还是有必要提一下:
首先是对于Java 开发者,通常可以自定义自己的集合和Iterator 来提前实现集合元素类型转换等操作。在Java 源码中,我们看到通过运用Iterator 和Factory 两种模式,开发者将特定集合类型的Iterator 在该类内作为内部类(inner class) 实现。而当我们开发自己的集合以及Iterator 时,完全也可以这么做
第二,如果自定义记集合内元素是以复合(composite )结构存在的,那么遍历的实现就会有一些复杂。这时的设计可能还要参考Composite 模式的概念。
第三,在Iterate 的过程中,必须关注Thread-Safe 的问题。通常可以通过加互斥锁,或者用Synchronized解决,比如:
list = Collections.synchronizedList(sourceList);
synchronized(list){
...
}
(这里还有一个细节,在Java 中,如果用Iterator遍历操作集合元素,发生线程冲突而程序员没有进行处理的话,Java 会抛出ConcurrentModificationException 异常;而如果不用Iterator, 而只是for 循环,即使有线程问题存在异常也不会被抛出。)
总之,对于Java 开发者而言,Iterator 模式在大部分情况下是现成可用的。而如果要自定义进行开发,有些东西就必须小心了。
参考:
http://www.dofactory.com/Patterns/PatternIterator.aspx
http://squall.cs.ntou.edu.tw/cpp/91spring/Iterator.html
http://www.cnblogs.com/singlepine/archive/2005/10/30/265024.html
http://digi.it.sohu.com/20050508/n240036877.shtml
分享到:
相关推荐
自定义语言的实现——解释器模式(五) 自定义语言的实现——解释器模式(六) 迭代器模式-Iterator Pattern 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...
在这个名为"JAVA design pattern-java设计模式"的CHM文件中,我们可能找到了关于如何在Java开发中应用设计模式的详细信息。 设计模式通常分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建,如单例...
"DesignPattern-master.zip"这个压缩包很可能包含了一个关于设计模式的项目或教程资源,用于学习和理解各种设计模式。 在这个“DesignPattern-master”目录中,我们可以期待找到不同类型的资源,如源代码示例、解释...
本资料包“DesignPattern - DesignPattern.zip”提供了对C++11中23种设计模式的全面讲解,特别是结合指针使用的部分,以下是对这些知识点的详细阐述: 1. **单例模式(Singleton)**:确保一个类只有一个实例,并...
本资源"23种设计模式的C++实现DesignPattern-master.zip"包含了以下设计模式的C++实现: 1. **创建型模式**: - **单例模式(Singleton)**:保证一个类只有一个实例,并提供全局访问点。 - **工厂方法模式...
"DesignPattern-85"项目显然关注的是设计模式的学习和应用,特别是与Java编程语言相关的实现。在这个项目中,作者旨在记录自己对设计模式的理解,并分享如何更高效地运用这些模式来优化代码。 首先,我们来讨论设计...
行为型模式如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、命令(Command)、迭代器(Iterator)、访问者(Visitor)、备忘录(Memento)、状态(State)、职责链(Chain of Responsibility...
在给定的"DesignPattern-Iterator"压缩包中,可能包含了关于迭代器模式的实现示例或代码分析,比如Java集合框架中的迭代器使用、自定义迭代器的设计等。通过阅读这些内容,可以更深入地理解迭代器模式在实际编程中的...
这个名为"design-pattern-in-java"的项目,显然旨在提供一系列Java实现的设计模式示例,帮助开发者理解和应用这些模式。 设计模式分为三大类:创建型模式、结构型模式和行为型模式。每种模式都有其特定的目标和适用...
这个名为"design-pattern:java设计模式源代码"的压缩包文件很可能是包含了多种Java实现的设计模式示例。 首先,我们来看看主要的设计模式分类: 1. 创建型模式:这类模式涉及到对象的创建,如单例模式(Singleton...
您已经提供了一个迭代器类Iterator ,用户可以创建它来遍历整个表达式树。 该迭代器的特殊之处在于它多次访问树的每个节点。 没有子节点的节点将被访问一次。 有一个孩子的节点被访问两次(访问孩子之前和之后)。 ...
设计模式(Design Pattern)是软件工程中的一种经验总结,它是在特定上下文中为解决常见问题而提出的一套可复用的解决方案。设计模式并不直接实现为代码,而是提供了一种在面向对象设计中如何处理常见问题的指南。...
这个“Graph-et-Design-Pattern-Iterateur:ISI3 - TP1”项目显然是关于在Java中实现迭代器模式,特别是在图(Graph)结构中的应用。 首先,我们需要理解迭代器模式的基本概念。迭代器模式提供了一种方法来顺序访问...
在"design-pattern.zip"这个压缩包中,我们很可能会找到一系列与Java设计模式相关的代码示例和文档。"design-pattern-master"可能是项目主目录的名字,暗示着这是一个完整的源码仓库。 设计模式分为三大类:创建型...
**设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式进行深入探讨。 #### 二、设计模式的基本定义 ...
"design-pattern-study"项目显然是一个专注于设计模式学习和实践的代码库。通过分析其中的代码,我们可以深入理解设计模式的原理和应用。在这个项目中,"design-pattern-study-main"可能包含了不同设计模式的实例...
CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...
- 迭代器模式(Iterator):顺序访问聚合对象的元素,而又不暴露其底层表示。 - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm”供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成...
3. 行为型设计模式:例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态...