迭代器模式总结如下图(可点击放大):
UML结构图:
示例:
public class IteratorTest {
public static void main(String[] args) {
Aggregate aggregate = new ConcreteAggregate();
aggregate.add("清华大学");
aggregate.add("北京大学");
aggregate.add("浙江大学");
aggregate.add("武汉大学");
System.out.println("聚合的内容有:");
Iterator iterator = aggregate.getIterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println(obj);
}
Object firstObj = iterator.first();
System.out.println("first:" + firstObj.toString());
}
}
//抽象聚合
interface Aggregate {
void add(Object obj);
void remvoe(Object obj);
Iterator getIterator();
}
//抽象迭代器
interface Iterator {
Object first();
Object next();
boolean hasNext();
}
//具体聚合
class ConcreteAggregate implements Aggregate {
private List<Object> list = new ArrayList<>();
@Override
public void add(Object obj) {
list.add(obj);
}
@Override
public void remvoe(Object obj) {
list.remove(obj);
}
@Override
public Iterator getIterator() {
return new ConcreteIterator(list);
}
}
//具体迭代器
class ConcreteIterator implements Iterator {
private List<Object> list;
private int index = -1;
public ConcreteIterator(List<Object> list) {
this.list = list;
}
@Override
public Object first() {
index = 0;
return list.get(index);
}
@Override
public Object next() {
Object obj = null;
if (this.hasNext()) {
obj = list.get(++index);
}
return obj;
}
@Override
public boolean hasNext() {
if (index < list.size() - 1) {
return true;
}
return false;
}
}