设计模式笔记——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);
	}
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号