現在很多編程語言都通過發語法糖來支持這種模式了,比如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);
}
}
}
迭代器模式的優缺點: