迭代器模式:提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。
正向迭代器实现
Iterator.java-迭代器抽象类
public abstract class Iterator {
//得到开始对象
public abstract Object first();
//得到下一个对象
public abstract Object next();
//判断是否到结尾
public abstract boolean isDone();
//返回当前对象
public abstract Object currentItem();
}
Aggregate.java-集合抽象类
/**
* 聚集抽象类
* @author Carl_Hugo
*/
public abstract class Aggregate {
//创建迭代器
public abstract Iterator createIterator();
}
ConcreteIterator.java-具体迭代器
package zx.iterator.test1;
public class ConcreteIterator extends Iterator{
//具体集合类
private ConcreteAggregate aggregate;
//当前索引
private int current=0;
//创建具体的迭代器,将具体集合传入
public ConcreteIterator(ConcreteAggregate aggregate){
this.aggregate=aggregate;
}
//获取第一个元素
@Override
public Object first() {
return aggregate.getByIndex(0);
}
//获取下一个元素
@Override
public Object next() {
Object ret=null;
current++;
if(current<aggregate.count()){
ret=aggregate.getByIndex(current);
}
return ret;
}
//判断是否是最后一个元素
@Override
public boolean isDone() {
return current>=aggregate.count()?true:false;
}
//返回当前元素
@Override
public Object currentItem() {
return aggregate.getByIndex(current);
}
}
ConcreteAggregate.java-具体的集合类
public class ConcreteAggregate extends Aggregate{
//创建list集合
private List<Object> items=new ArrayList<Object>();
//创建该集合的迭代器
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
//返回集合中对象的数量
public int count(){
return items.size();
}
//获取和设置集合中的元素
public Object getByIndex(int index){
return items.get(index);
}
public void setByIndex(int index,Object value){
items.add(index, value);
}
}
Test.java-测试
public class Test {
public static void main(String[] args) {
//创建具体的集合类
ConcreteAggregate concreteAggregate = new ConcreteAggregate();
concreteAggregate.setByIndex(0,"大鸟");
concreteAggregate.setByIndex(1,"小菜");
concreteAggregate.setByIndex(2,"行李");
concreteAggregate.setByIndex(3,"老外");
concreteAggregate.setByIndex(4,"公交内部员工");
concreteAggregate.setByIndex(5,"小偷");
//通过集合类创建迭代器
Iterator i = concreteAggregate.createIterator();
//将具体集合类作为参数传入迭代器的构造函数中
// ConcreteIterator i = new ConcreteIterator(concreteAggregate);
Object first = i.first();
while(!i.isDone()){
System.out.println(i.currentItem()+"请买票");
i.next();
}
}
}
输出