微信扫一扫

028-83195727 , 15928970361
business@forhy.com

迭代器模式(Iterator)Java

2016-06-11


迭代器模式(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