UML类图不画了,简而言之,Java中的迭代器模式可以实现java.lang.Iterable接口,在类的内部定义一个私有类,实现java.util.Iterator接口,重写java.lang.Iterable中的public Iterator iterator();接口实现工厂模式生成模式,这样就实现了java中的迭代器模式。
package iterator;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* 实现一个二元组.
* @author wwe
*
*/
public class Pair<T> implements Iterable<T>{
private final T first;
private final T second;
public Pair(T first, T second){
this.first = first;
this.second = second;
}
@Override
public Iterator<T> iterator() {
// TODO 自动生成的方法存根
return new PairIterotor();
}
private class PairIterotor implements Iterator<T> {
private boolean seenFirst = false;
private boolean seenSecond = false;
@Override
public boolean hasNext() {
return !seenSecond;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
@Override
public T next() {
if (!seenFirst) {
seenFirst = true;
return first;
}
if(!seenSecond) {
seenSecond = true;
return second;
}
throw new NoSuchElementException();
}
}
}
package iterator;
public class Client {
public static void main(String[] args) {
String s1 = new String("Hello");
String s2 = new String("world");
Pair<String> pair = new Pair<String>(s1,s2);
for (String s : pair) {//因为重写了java.util.Iterator,所以可以这样调用
System.out.println(s);
}
}
}
执行结果
Hello
world