先上一个iterator design pattern (迭代器模式)的类图。
Aggregat 是一个抽象的集合体,ConcreteAggregat是Aggregat的一种实现,iterator表示一个迭代器的通用接口。
在javaAPI中这个接口的定义为:
java.util
Java代码
interfaceIterator{
booleanhasNext();
E next();
voidremove();
}
interface Iterator{
boolean hasNext();
E next();
void remove();
}
ConcreteIterator 是针对于ConcreteAggregate这个特定的集合体对Iterator的一个实现。
注意 ConcreteIterator和ConcreteAggregate的关系是关联,也就是ConcreteIterator中包含一个ConcreteAggregate的实例,而接口函数的实现(implement)正是基于这个实例。
反之 ConcreteAggregate和ConcreteIterator的关系是依赖,意思就是ConcreteAggregate的一些方法的实现一些功能的实现需要依赖于ConcreteIterator,在具体java语言中这一点体现在
class ConcreteAggregate implements Iterable 需要实现一个 Iterator iterator()方法。注意了iterator居然没有参数,那么它怎么得到ConcreteIterator的信息呢(一般的依赖关系,需要传递对象作为函数参数),答案就是 interClass(内部类)的方法