首页 > 代码库 > 设计模式之迭代器模式

设计模式之迭代器模式

定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

结构图:


示例代码:

public interface Iterator {

	public Object First();

	public Object Next();

	public boolean isDone();

	public Object currentItem();
}
public class ConcreteIterator implements Iterator{

	private ConcreteAggregate aggregate;
	private int current = 0;

	public ConcreteIterator(ConcreteAggregate aggregate) {
		
		this.aggregate = aggregate;
	}

	@Override
	public Object First() {
		// TODO Auto-generated method stub
		return aggregate.get(0);
	}

	@Override
	public Object Next() {
		// TODO Auto-generated method stubg
		Object ret = null;
		current ++;
		if (current < aggregate.count()) {
			ret = aggregate.get(current);
		}
		return ret;
	}

	@Override
	public boolean isDone() {
		// TODO Auto-generated method stub
		return current >= aggregate.count()? true : false;
	}

	@Override
	public Object currentItem() {
		// TODO Auto-generated method stub
		return aggregate.get(current);
	}
	
}

public abstract class Aggregate {

	public abstract Iterator createIterator();
}

public class ConcreteAggregate extends Aggregate {

	private List<Object> items = new ArrayList<Object>();

	@Override
	public Iterator createIterator() {
		// TODO Auto-generated method stub
		return new ConcreteIterator(this);
	}

	public int count() {
		return items.size();
	}

	public Object get(int index) {

		return items.get(index);
	}

	public void add(Object obj) {
		items.add(obj);
	}
}
客户端代码如下:

public class Client {

	public static void main(String[] args) {
		
		ConcreteAggregate a = new ConcreteAggregate();
		a.add("123");
		a.add("菜鸟");
		a.add("阿里");
		
		Iterator i = new ConcreteIterator(a);
		Object item = i.First();
		while (!i.isDone()) {
			System.out.println(i.currentItem());
			i.Next();
		}
	}
}

运行结果:

123

菜鸟

阿里



设计模式之迭代器模式