迭代器模式又称为游标模式,Java中的List遍历就可以使用迭代器,而不需要使用“明显”的遍历算法,下面举一个迭代器模式的小例子
迭代器接口
public interface Iterator<T> {
boolean hasNext();
T next();
}
具体迭代器类
public class ConcreteIterator<T> implements Iterator {
private List<T> list = new ArrayList<T>();
private int cursor = 0;
public ConcreteIterator(List<T> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return cursor != list.size();
}
@Override
public Object next() {
T obj = null;
if (this.hasNext()) {
obj = this.list.get(cursor++);
}
return obj;
}
}
容器接口
public interface Aggregate<T> {
void add(T obj);
void remove(T obj);
Iterator<T> iterator();
}
具体容器类
public class ConcreteAggregate<T> implements Aggregate<T> {
private List<T> list = new ArrayList<T>();
@Override
public void add(T obj) {
list.add(obj);
}
@Override
public void remove(T obj) {
list.remove(obj);
}
@Override
public Iterator<T> iterator() {
return new ConcreteIterator<T>(list);
}
}
实现示例
public class Main {
public static void main(String[] args) {
Aggregate<String> aggregate = new ConcreteAggregate<>();
aggregate.add("android");
aggregate.add("studio");
aggregate.add("Google");
Iterator<String> iterator = aggregate.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
实际上,迭代器模式是一个不需要由开发者实现的模式,这里只是来解析以下迭代器是怎样构成的,实际上List容器有自带的迭代器,不需要我们自己实现