迭代器模式(Iterator)Java
2016-06-11
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(); }
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; } }
package ding.study.designpatterns.iterator; /** * 聚集抽象类 * @author daniel * */ public abstract class Aggregate { //创建迭代器 public abstract Iterator createIterator(); }
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