先上一个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
分享到:
相关推荐
C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载
java Iterator迭代器的使用 java Iterator迭代器的使用 java Iterator迭代器的使用
java中Iterator迭代器讲解,基础数据对象。
用java编写的迭代器,实现10数字正反向遍历。
该文档是演示迭代器Iterator的使用方法和源代码,其中包括了Iterator的继承类的讲解和再Iterator中的两种方法
【Java设计模式】(1)迭代器模式Iterator(代码)
C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 (Level 300)
迭代器模式的示例代码和文档,学习迭代器模式的参考资料。
迭代器模式(Iterator Pattern)是设计模式中的一种行为模式,它允许顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式提供了一种方法,可以顺序地访问一个聚合对象中的各个元素,而又...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不... 这是第18节:行为型模式Iterator迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
迭代器(Iterator) 用意:可以顺序地访问一个集合中的元素而不必暴露集合中的内部表象。
这个是利用iterator迭代器来对hashMap进行迭代元素,数据java基础的内容。有兴趣的朋友可以看看。
vector容器与iterator迭代器,有两者的区别和联系,供大家学习理解
IteratorPattern 迭代设计模式
主要介绍了Java使用Iterator迭代器遍历集合数据的方法,结合实例形式分析了java迭代器进行集合数据遍历的常见操作技巧,需要的朋友可以参考下
Java学习之Iterator(迭代器)的一般用法
2.定义一个Iterator迭代器的接口 3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的...