今天总结一下迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。迭代器模式在访问数组、集合、列表等数据时,尤其是数据库数据操作时,是非常普遍的应用,但由于它太普遍了,所以各种高级语言都对它进行了封装,我们对它进行总结主要就是方便我们日后总结源码。
迭代器的实现
我们来看一下迭代器模式的UML图:
同样的,我们根据UML图去实现一下
public interface Iterator<T> {
boolean hasNext();
T next();
}
public class ConcreteIterator<T> implements Iterator{
private List<T> list = new ArrayList<>();
private int cursor = 0;
@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<>();
@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<>();
}
}
public class Client {
public void main(String[] args){
Aggregate<String> a = new ConcreteAggregate<>();
a.add("Aige");
a.add("Studio\n");
a.add("SM");
a.add("Brother");
Iterator<String> i = a.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
在java集合框架源码中,就封装了迭代器,因此大多数情况下是不要求我们自己写迭代器的,总结迭代器模式主要是为了后期研究源码,
对于迭代模式来说,其自身优点很明显也很单一,支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类与遍历算法之间的关系,而缺点就是对类文件的增加。