JAVA的collection集合包中的集合类大都用迭代器模式实现。迭代器的好处是不同类型的集合可用相同的遍历机制,并且集合内部的实现又很好的隐藏了起来。下面介绍一个实现一个自定义的迭代器示例,在实际的运用中我们可以用Collection包中实现的类实现特定行为的容器,而无需像本文一样创建StringArray容器。
1.迭代器创建接口类
public interface Aggregate {
public Iterator createIterator();
}
2.迭代器方法接口类
public interface Iterator {
public Object next();
public boolean hasNext();
}
3.迭代器实现类
//迭代器容器
public class StringArray implements Aggregate{
private String values[];
public StringArray(String[] values) {
super();
this.values = values;
}
//外部类暴露创建迭代器的方法
@Override
public Iterator createIterator() {
return (Iterator)new StringArrayIterator();
}
//迭代器实现
private class StringArrayIterator implements Iterator{
private int position;
@Override
public Object next() {
if(this.hasNext()) {
return values[position++];
}else {
return null;
}
}
@Override
public boolean hasNext() {
return (this.position<values.length);
}
}
public static void main(String[] args) {
String []arrStr = {"1","2","3"};
StringArray arr = new StringArray(arrStr);
for (Iterator it = arr.createIterator();it.hasNext();) {
System.out.println(it.next());
}
}
}
4.运行结果: