现在很多编程语言都通过发语法糖来支持这种模式了,比如Java的for-each,但我们对这个模式做个了解还是有必要的。
package iterator;
public interface Iterator {
public Object next();
public boolean hasNext();
}
package iterator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteIterator implements Iterator {
private List list = new ArrayList();
private int cursor =0;
public ConcreteIterator(List list){
this.list = list;
}
@Override
public Object next() {
// TODO Auto-generated method stub
Object obj = null;
if(this.hasNext()){
obj = this.list.get(cursor++);
}
return obj;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return list.size()==cursor?false:true;
}
}
package iterator;
public interface Aggregate {
public void add(Object obj);
public void remove(Object obj);
public Iterator iterator();
}
package iterator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate implements Aggregate {
private List list = new ArrayList();
@Override
public void add(Object obj) {
// TODO Auto-generated method stub
list.add(obj);
}
@Override
public void remove(Object obj) {
// TODO Auto-generated method stub
list.remove(obj);
}
@Override
public Iterator iterator() {
// TODO Auto-generated method stub
return new ConcreteIterator(list);
}
}
package iterator;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Aggregate ag = new ConcreteAggregate();
ag.add("小明");
ag.add("小红");
ag.add("小刚");
Iterator it = ag.iterator();
while(it.hasNext()){
String str = (String)it.next();
System.out.println(str);
}
}
}
迭代器模式
的优缺点: