设计模式-迭代器模式

http://ov1nop9io.bkt.clouddn.com/iterator_pattern_uml_diagram.jpg

  • 提供一种方法访问一个聚合对象中的各个元素,而又无需暴露改对象的内部表示

  • 应用场景:遍历一个聚合对象,当你需要访问一个聚集对象,

  • 而且不管这些对象是什么都需要遍 历的时候,

  • 就应该考虑用迭代器模式。

  • 实例:JAVA 中的 iterator

1
2
3
4
5
6
7
8
/*
* 创建一个叙述导航方法的 Iterator 接口和一个返回迭代器的 Container 接口
* 实现了 Container 接口的实体类将负责实现 Iterator 接口
*/
public interface Iterator {
public boolean hasNext();
public Object next();
}
1
2
3
4
public interface Container {
public Iterator getIterator();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 创建实现了 Container 接口的实体类。
* 该类有实现了 Iterator 接口的内部类 NameIterator
*/
public class NameRepository implements Container{

public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator{
int index;

@Override
public boolean hasNext() {
if (index < names.length){
return true;
}
return false;
}

@Override
public Object next() {
if (this.hasNext()){
return names[index++];
}
return null;
}
}
}
1
2
3
4
5
6
7
8
9
10
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();

for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}