/**
* 迭代器接口,负责定义\访问和遍历元素的接口
* Created by max on 2016/4/13.
*/
public interface Iterator<T> {
/**
* 是否还有下一个元素
* @return true表示有
*/
boolean hasNext();
/**
* 返回当前位置的元素并将位置移至下一位
* @return
*/
T next();
}
ConcreteIterator:具体迭代器类,主要是实现迭代器接口,并记录遍历的当前位置
/**
* 具体迭代器类,主要是实现迭代器接口,并记录遍历的当前位置
* Created by max on 2016/4/13.
*/publicclassConcreteIterator<T> implementsIterator<T>{privateList<T> list = new ArrayList<>();
private int cursor = 0;
public ConcreteIterator(List<T> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return cursor != list.size();
}
@Override
public T next() {
T obj = null;
if (this.hasNext()) obj = this.list.get(cursor++);
return obj;
}
}
Aggregate:容器接口.负责提供创建具体迭代器角色的接口
/**
* 容器接口.负责提供创建具体迭代器角色的接口
* Created by max on 2016/4/13.
*/
public interface Aggregate<T> {
/**
* 添加一个元素
* @param obj 元素
*/
void add(T obj);
/**
* 移除一个元素
* @param obj
*/
void remove(T obj);
/**
* 获取容器的迭代器
* @return 迭代器对象
*/
Iterator<T> iterator();
}
ConcreteAggregate:具体容器类,具体迭代器角色与该容器相关联.
/**
* 具体容器类,具体迭代器角色与该容器相关联
* Created by max on 2016/4/13.
*/publicclassConcreteAggregate<T> implementsAggregate<T> {privateList<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() {
returnnew ConcreteIterator<T>(list);
}
}
Client:客户类
/**
* 客户类
* Created by max on 2016/4/13.
*/publicclassClient {publicstaticvoidmain(String args[]){
Aggregate<String> a = new ConcreteAggregate<>();
a.add("第一个");
a.add("第二个");
a.add("第三个");
a.add("第四个");
Iterator<String> i = a.iterator();
//其实这里就是迭代器遍历容器的元素,内部还是list实现的while(i.hasNext()){
i.next();
}
}
}