设计模式:迭代器模式
什么是迭代器模式
提供一个方法来访问聚合对象,而不用暴露这个对象的内部结构。
迭代器模式的结构
-
Aggregate:抽象聚合类
-
ConcreteAggregate:具体聚合类
-
Iterator:抽象迭代器
-
ConcreteIterator:具体迭代器
迭代器模式的一个实例
Iterator
public abstract class Iterator {
public abstract Object first();
public abstract Object next();
public abstract boolean isDone();
public abstract Object currentItem();
}
ConcreteIterator
import java.util.List;
public class ConcreteIterator extends Iterator {
private ConcreteList list;
private List<Object> objects;
private int cur = 0;
public ConcreteIterator(ConcreteList list) {
this.list = list;
this.objects = list.getObjects();
}
@Override
public Object first() {
return list.size()>0 ? objects.get(0) : null;
}
@Override
public Object next() {
if (cur < list.size()){
return objects.get(cur++);
}
return null;
}
@Override
public boolean isDone() {
return cur == list.size() ? true : false;
}
@Override
public Object currentItem() {
return objects.get(cur);
}
}
AbstractList
import java.util.List;
public abstract class AbstractList {
public abstract void add(Object obj);
public abstract int size();
public abstract List<Object> getObjects();
public abstract Iterator createIterator();
}
ConcreteList
import java.util.ArrayList;
import java.util.List;
public class ConcreteList extends AbstractList {
private List<Object> list = new ArrayList<Object>();
@Override
public void add(Object obj) {
list.add(obj);
}
@Override
public int size() {
return list.size();
}
@Override
public List<Object> getObjects() {
return list;
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
}
Client
public class Client {
public static void main(String[] args){
AbstractList list = new ConcreteList();
list.add("Hello");
list.add("World");
list.add("!");
Iterator iterator = list.createIterator();
while (!iterator.isDone()){
System.out.println(iterator.next());
}
}
}
实例结果
Hello
World
!
(完)