`

全面分析iterator(迭代器)模式,以及具体java实例

阅读更多

先上一个iterator design pattern (迭代器模式)的类图。

Aggregat 是一个抽象的集合体,ConcreteAggregat是Aggregat的一种实现,iterator表示一个迭代器的通用接口。
在javaAPI中这个接口的定义为:
java.util
interface Iterator<E>{
      boolean hasNext();
      E next();
      void remove();
}


ConcreteIterator 是针对于ConcreteAggregate这个特定的集合体对Iterator的一个实现。
注意 ConcreteIterator和ConcreteAggregate的关系是关联,也就是ConcreteIterator中包含一个ConcreteAggregate的实例,而接口函数的实现(implement)正是基于这个实例。
反之 ConcreteAggregate和ConcreteIterator的关系是依赖,意思就是ConcreteAggregate的一些方法的实现一些功能的实现需要依赖于ConcreteIterator,在具体java语言中这一点体现在

class ConcreteAggregate implements Iterable<T> 需要实现一个 Iterator<T> iterator()方法。注意了iterator居然没有参数,那么它怎么得到ConcreteIterator的信息呢(一般的依赖关系,需要传递对象作为函数参数),答案就是 interClass(内部类)的方法

下面举一个实现了迭代器模式的具体java的程序例子。参考自《thinking in java》英文第四版 432页:
import java.util.*;

class IterableClass implements Iterable<String>{
	protected String[] words =("I love java design pattern").split(" ");
	public Iterator<String> iterator(){
		return new Iterator<String>(){
			private int subscript = 0;
			public boolean hasNext(){
				if(subscript < words.length)
					return true;
				return false;
			}
			public String next(){
				return words[subscript++];
			}
			public void remove(){
				//Not implemented
				throw new UnsupportedOperationException();
			}
		};
	}
}

class Go{
	public static void main(String args[]){
		IterableClass ic = new IterableClass();
		for(String string : ic){
			System.out.println(string);
		}
		
		System.out.println("-------------------");
		
		ic.words = ("Ha ha , java!").split(" ");
		for(String string : ic){
			System.out.println(string);
		}
	}
}


在这个例子中IterableClass就是一个ConcreteAggregate,而implements了接口Iterator<String> 的佚名内部类就是一个ConcreteIterator,因为非静态的内部类是可以访问到外部类的所有变量和方法(fileds and methods),所以相当于ConcreateIterator中有一个ConcreteAggregate的成员变量,即这是一个关联关系,反之IterableClass的某个功能(Iterator<String> iterator())需要依赖于那个佚名内部类,所以IterableClass(ConcreteAggregate) 和 内部佚名类(ConcreteIterator)的关系就是依赖。

应为内部类的写法好像看起来迷惑了本文开头的迭代器模式的类图,所以做了一个解释,因为同一个design pattern 可以映射到不同的java 代码,在此我的code 仅仅是 iterator design pattern 的一种具体实现。
谢谢 ,鞠躬,下台, 欢迎拍砖,欢迎转载(请注明 author mubing_s)


  • 大小: 32.5 KB
分享到:
评论

相关推荐

    java23种设计模式详解+源码(绝对详解)

    - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式(Memento):在不...

    Java设计模式经典搞笑珍藏

    14. **迭代器模式(IteratorPattern)**:提供一种方法顺序访问一个聚合对象中的各个元素。 15. **组合模式(CompositePattern)**:将对象组合成树形结构以表示“部分-整体”的层次结构。 16. **观察者模式...

    JAVA设计模式(中文).chm

    3. **行为型设计模式**:这类模式涉及对象间责任分配和交互,包括命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、观察者模式(Observer...

    java-design-patterns

    包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、解释器模式(Interpreter)、中介者模式(Mediator)、备忘录模式(Memento)...

    Java设计模式(第2版)

    - **迭代器模式(Iterator)**:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 - **访问者模式(Visitor)**:表示一个作用于某对象结构中的各元素的操作。 - **中介者模式...

    设计模式 打包

    这23种模式分为创建型、结构型和行为型三大类,包括单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者\Builder、原型\Prototype、适配器(Adapter)、桥接(Bridge)、组合(Composite)、...

    Java精华面试三套题

    3. 讨论迭代器(Iterator)和泛型(Generics)在集合操作中的作用。 4. 阐述集合与数组的转换,以及集合的遍历和查找方法。 5. 深入理解Map接口,包括键值对的存取、遍历及常用方法。 第四部分:多线程与并发 1. ...

    Building Java Programs A Back to Basics Approach (2nd Edition) .pdf 下载.rar

    12. **集合框架**:学习ArrayList、LinkedList、HashSet、HashMap等集合类的使用,理解迭代器(Iterator)和泛型的概念。 13. **多线程**:理解线程的基本概念,创建和管理线程,使用synchronized关键字实现线程...

    java北京大学讲义(推荐)

    5. **集合框架**:Java集合框架提供了丰富的数据结构,如ArrayList、LinkedList、HashMap等,以及Iterator和ListIterator等迭代器。 6. **输入/输出(I/O)与文件操作**:讲解如何使用File类和流进行文件读写,包括...

Global site tag (gtag.js) - Google Analytics