迭代器模式
Salted Fish 1991/6/26 行为型
# 概述
Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。
提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示。
把在元素之间游走的责任交给迭代器,而不是聚合对象。**主要解决:**不同的方式来遍历整个整合对象。
# 示例
以使用迭代器打印名字为例,总共分三步:
创建接口:
public interface Iterator { public boolean hasNext(); public Object next(); } public interface Container { public Iterator getIterator(); }1
2
3
4
5
6
7
8
9创建实现了 Container 接口的实体类。该类有实现了 Iterator 接口的内部类 NameIterator。
public class NameRepository implements Container { private String names[] = {"John", "jingbin", "youlookwhat", "lookthis"}; @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 (hasNext()) { return names[index++]; } return null; } } }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使用 NameRepository 来获取迭代器,并打印名字。
NameRepository nameRepository = new NameRepository(); for (Iterator iterator = nameRepository.getIterator(); iterator.hasNext(); ) { String name = (String) iterator.next(); Log.e("---", name); /* * /---: John * /---: jingbin * /---: youlookwhat * /---: lookthis */ }1
2
3
4
5
6
7
8
9
10
11
# JDK应用实例
**应用实例:**JAVA 中的 iterator。
优点:
它支持以不同的方式遍历一个聚合对象。
迭代器简化了聚合类。
在同一个聚合上可以有多个遍历。
在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点:
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
使用场景:
访问一个聚合对象的内容而无须暴露它的内部表示。
需要为聚合对象提供多种遍历方式。
为遍历不同的聚合结构提供一个统一的接口。
迭代器模式在JDK中的应用
Iterator<Integer> iter = null;
System.out.println("ArrayList:");
iter = arrayList.iterator();
while (iter.hasNext()) {
System.out.print(iter.next() + "\t");
}
1
2
3
4
5
6
7
2
3
4
5
6
7