迭代器模式(Iterator):
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
类图:
代码
Iterator迭代器 抽象类
package ding.study.designpatterns.iterator;
/**
* 迭代器 抽象类
* @author daniel
*
*/
public abstract class Iterator {
//返回第一条数据
public abstract Object first();
//下一条数据
public abstract Object next();
//是否有下一条
public abstract boolean isDone();
//当前条数
public abstract Object currentItem();
}
ConcreteIterator迭代器实现类
package ding.study.designpatterns.iterator;
/**
* 迭代器实现类
*
* @author daniel
*
*/
public class ConcreteIterator extends Iterator {
// 聚集类
private ConcreteAggregate aggregate;
private int current = 0;
/**
* 初始化传入聚集类
*
* @param aggregate
*/
public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate = aggregate;
}
/**
* 获得当前数值
*/
@Override
public Object currentItem() {
return aggregate.get(current);
}
/**
* 返回第一条值
*/
@Override
public Object first() {
return this.aggregate.get(0);
}
/**
* 判断是否有下一条 false 是有下一条
*/
@Override
public boolean isDone() {
// TODO Auto-generated method stub
return current >= aggregate.count() ? true : false;
}
/**
* 下一条返回
*/
@Override
public Object next() {
Object ret = null;
current++;
if (current < aggregate.count()) {
ret = aggregate.get(current);
}
return ret;
}
}
Aggregate聚集抽象类
package ding.study.designpatterns.iterator;
/**
* 聚集抽象类
* @author daniel
*
*/
public abstract class Aggregate {
//创建迭代器
public abstract Iterator createIterator();
}
ConcreteAggregate实现聚集类
package ding.study.designpatterns.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* 实现聚集类
*
* @author daniel
*
*/
public class ConcreteAggregate extends Aggregate {
private List<Object> items = new ArrayList<Object>();
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
/**
* 返回总条数
*
* @return
*/
public int count() {
return this.items.size();
}
/**
* 获得索引 对应的值
*
* @param index
* @return
*/
public Object get(int index) {
return this.items.get(index);
}
/**
* 设置新数据
*
* @param index
* @param value
*/
public void set(int index, Object value) {
this.items.add(index, value);
}
}
输出结果
源码 :
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/iterator