设计模式笔记——Iterator

迭代器模式Iterator

 

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

 

当需要访问一个聚合对象,并且不管这些对象什么时候需要遍历,就应该考虑使用迭代器模式


package iterator.pattern;

public class IteratorPattern {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ConcreteAggregate aggreagate = new ConcreteAggregate();

		aggreagate.AddItem("Hello");
		aggreagate.AddItem("World");
		aggreagate.AddItem("!");
		aggreagate.AddItem("Wiki");
		aggreagate.AddItem("Java");

		Iterator iterator = aggreagate.CreateIterator();

		while (!iterator.IsDone()) {
			System.out.println(iterator.CurrentItem());
			iterator.Next();
		}

	}

}

package iterator.pattern;

public interface Iterator {
	
	public abstract Object First();
	
	public abstract Object Next();
	
	public abstract boolean IsDone();
	
	public abstract Object CurrentItem();

}

package iterator.pattern;

public class ConcreteIterator implements Iterator {

	private ConcreteAggregate aggregate;
	private int current = 0;

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

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

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

	@Override
	public boolean IsDone() {
		// TODO Auto-generated method stub
		return current >= aggregate.Count();
	}

	@Override
	public Object Next() {
		// TODO Auto-generated method stub
		++current;
		if (current < aggregate.Count())
			return aggregate.GetItem(current);
		else
			return null;
	}

}

package iterator.pattern;

public interface Aggregate {
	
	public abstract Iterator CreateIterator();

}

package iterator.pattern;

import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate implements Aggregate {

	private List<Object> items=new ArrayList<Object>();
	
	@Override
	public Iterator CreateIterator() {
		// TODO Auto-generated method stub
		return new ConcreteIterator(this);
	}
	
	public Object GetItem(int index){
		return items.get(index);
	}
	
	public int Count(){
		return items.size();
	}
	
	public void AddItem(Object item){
		items.add(item);
	}

}


posted @ 2012-08-15 10:59  Leeforall  阅读(133)  评论(0)    收藏  举报