迭代器模式也称游标模式,在绝大多数编程语言中,迭代器已经成为一个基础的类库,直接用来遍历集合对象。关键思想是将访问和遍历的职责从集合对象中分离出来,放入标准的协议对象中。算法
它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。编程
模板代码markdown
//1.抽象迭代器
public interface Iterator{
//遍历到下一个元素
public Object next();
//是否已经遍历到尾部
public boolean hasNext();
//删除当前指向的元素
public boolean remove();
}
//2.具体迭代器
public class ConcreteIterator implements Iterator{
private Vector vector = new Vector();
//定义当前游标
public int cursor = 0;
public ConcreteIterator(Vector _vector){
this.vector = _vector;
}
//判断是否到达尾部
public boolean hasNext(){
if(this.cursor == this.vector.size()){
return false;
}else{
return true;
}
}
//返回下一个元素
public Object next(){
Object result = null;
if(this.hasNext()){
result = this.vector.get(this.cursor++);
}else{
result = null;
}
return result;
}
//删除当前元素
public boolean remove(){
this.vector.remove(this.cursor);
return true;
}
}
//3.抽象容器
public interface Aggregate{
//是容器必然有元素的增长
public void add(Object object);
//减小元素
public void remove(Object object);
//由迭代器来遍历全部的元素
public Iterator iterator();
}
//4.具体容器
public class ConcreteAggregate implements Aggregate{
//容纳对象的容器
private Vector vector = new Vector();
//增长一个元素
public void add(Object object){
this.vector.add(object);
}
//返回迭代器对象
public Iterator iterator(){
return new ConcreteIterator(this.vector);
}
//删除元素
public void remove(Object object){
this.vector.remvoe(object);
}
}
//5.场景类
public class Client{
public static void main(String[] args){
//容器
Aggregate agg = new ConcreteAggregate();
//添加数据
agg.add("abc");
agg.add("aaa");
agg.add("1234");
//遍历
Iterator iterator = agg.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
复制代码
对客户端隐藏其遍历算法复杂性时编程语言
须要简化重复的循环遍历逻辑时this
知足单一职责原则,将遍历算法代码统一抽取封装为独立的类,职责仅仅是遍历数据spa
知足开闭原则,当须要对新的对象集合进行扩展时,只须要新增具体的对象迭代器和具体的集合类就能够code
避免了直接使用for
循环的重复代码问题orm
增长了子类数量对象
增长了系统复杂性rem