迭代器模式
提供一种可以遍历聚合对象的方式,又称cursor模式。迭代器模式(Iterator)就是分离了聚合对象的遍历行为,抽象出一个迭代器来负责这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部数据。
聚合对象:存储数据
迭代器:遍历数据
结构图

聚合抽象类一般以内部类的方式存储
/**
* 定义迭代器接口
*/
public interface MyIterator {
void first();
void next();
boolean hasNext();
boolean isFirst();
boolean isLast();
Object getCurrentObject();
}
/
* 聚合类
*/
public class ConcreteAggregate {
private List<Object> list = new ArrayList<>();
public void addConcrete(Object obj){
list.add(obj);
}
public MyIterator createIterator(){
return new ConcretIterator();
}
private class ConcretIterator implements MyIterator{
private int cursor; //定义游标,用于记录变量时的位置
@Override
public void first() {
cursor = 0;
}
@Override
public void next() {
if(cursor == list.size()){
return;
}
cursor++ ;
}
@Override
public boolean hasNext() {
if(cursor< list.size()){
return true;
}
return false;
}
@Override
public boolean isFirst() {
return cursor == 0?true:false;
}
@Override
public boolean isLast() {
return cursor == list.size()? true:false;
}
@Override
public Object getCurrentObject() {
return list.get(this.cursor);
}
}
}
public class Client {
public static void main(String[] args){
ConcreteAggregate ca = new ConcreteAggregate();
ca.addConcrete("zhang");
ca.addConcrete("lisi");
ca.addConcrete("wangWS");
MyIterator iterator = ca.createIterator();
while (iterator.hasNext()){
System.out.println(iterator.getCurrentObject());
iterator.next();
}
}
}