迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构
作用
用于类型的隐藏
内部类可以无限制访问其外部类的成员,包括private成员
/*
*内部类(inner class)
*定义:定义在类、方法体、接口中的class
*作用
*用于类型的隐藏
*内部类可以无限制访问其外部类的成员,包括private成员
*/
/*迭代器模式(iterator):对访问动作的抽象
- 底层存放数据的集合:数组(int),私有的,外界不能直接访问
- 通过private内部类的方式实现迭代器
- 有名字的内部类
- 匿名内部类
*/
//迭代器接口
public interface Iterator {
int current();
int next();
boolean isFinish();
}
public class Sequence {
private int[] data;
private int cur;
public Sequence(int n) {
data = new int[n];
for (int k = 1; k <= n; k++) data[k-1] = k;
}
//返回一个接口,让外界按指定的顺序读取data
public Iterator iterator() {
cur = 0;
return new NormalIterator();
}
//顺序访问,类型隐藏,DAO
private class NormalIterator implements Iterator {
@Override
public int current() {
return data[cur];
}
@Override
public int next() {
if (cur < data.length) cur++;
if (isFinish()) return -1;
return data[cur];
}
@Override
public boolean isFinish() {
return (cur == data.length);
}
}
//逆序访问,在方法中定义的匿名内部类
public Iterator invIterator() {
cur = data.length - 1;
//改为用在方法中定义的匿名内部类实现
return new Iterator() {
@Override
public int current() {
return data[cur];
}
@Override
public int next() {
if (cur >=0) cur--;
if (isFinish()) return -1;
return data[cur];
}
@Override
public boolean isFinish() {
return (cur == -1);
}
};
}
}
public static void main(String[] args) {
Sequence s = new Sequence(20);
//Iterator iter = s.iterator();
Iterator iter = s.invIterator();
do {
System.out.print(iter.current() + " ");
iter.next();
} while (!iter.isFinish());
}
本文介绍迭代器模式的应用及内部类的特性。通过具体代码示例,展示了如何使用迭代器模式来遍历集合元素,并利用内部类隐藏类型实现对外部类成员的访问。

被折叠的 条评论
为什么被折叠?



