迭代器模式
原理:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节
结构
抽象容器:一般是一个接口,提供一个iterator()方法 例如java中的Collection、Set、List等接口
具体容器:抽象容器的具体实现类,例如java中LinkList、ArrayList、HashSet
抽象迭代器:定义遍历函数所需要的方法如:获取第一个元素、取得下一个元素的方法、是否是最后一个元素的方法、移除某一个元素
迭代器:实现抽象迭代器中的抽象方法,并且实现集合的迭代
代码示例
抽象容器
//抽象容器
public interface Aggregate {
//添加的方法
public void add(Object obj);
//移除的方法
public void remove(Object obj);
//获取迭代器对象的方法
public IteratorInterface iterator();
}
具体容器
<pre name="code" class="html">import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate implements Aggregate{
private List<Object> list = new ArrayList<Object>();
@Override
public void add(Object obj) {
// TODO Auto-generated method stub
list.add(obj);
}
@Override
public void remove(Object obj) {
// TODO Auto-generated method stub
list.remove(obj);
}
@Override
public IteratorInterface iterator() {
// TODO Auto-generated method stub
return new ConcreteIterator(list);
}
}
抽象迭代器
<pre name="code" class="html">public interface IteratorInterface {
//判断是否有下一个元素
public boolean hasNext();
//下一个对象
public Object next();
}
迭代器
<pre name="code" class="html">import java.util.*;
import java.util.ArrayList;
public class ConcreteIterator implements IteratorInterface{
private List<Object> list = new ArrayList<Object>();
//一个游标标明位置
private int cursor = 0;
public ConcreteIterator(List<Object> list) {
// TODO Auto-generated constructor stub
this.list = list;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(cursor==list.size()){
return false;
}
return true;
}
@Override
public Object next() {
// TODO Auto-generated method stub
Object object = null;
if(this.hasNext()){
object = this.list.get(cursor++);
}
return object;
}
}
总结
1.在j'ava中一般集合都是有迭代器的,java已经帮你实现好了
2.我们可以提供多种遍历的方式,对于有序列表我们可以提供两种遍历器,一种正序遍历,一种返序遍历,用户只需要使用迭代器就好了(直接帮他封装好了)