设计模式——迭代器模式

       迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。
       把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所
       提供一种可以遍历聚合对象的方式,又称为:游标cursor模式
       聚合对象:存储数据
       迭代器:遍历数据
       JDK内置iterator  正向迭代  反向迭代
       设计原则:一个类应该只有一个引起变化的原因。

       看一个简单的迭代器模式Demo:

      

public interface MyIterator {
	Object first();
	Object last();
	Object next();
	boolean hasNext();
	boolean isFirst();
	boolean isLast();
	
}

public class ConcreteAggregate {
	private List<Object> list;
	
	public ConcreteAggregate() {
		list = new ArrayList<>();
	}
	public void add(Object obj) {
		list.add(obj);
	}
	public void remove(Object obj) {
		list.remove(obj);
	}
	
	public void setList(List<Object> list) {
		this.list = list;
	}
	public List<Object> getList() {
		return list;
	}
	
	public MyIterator createIterator() {
		return new ConcreteIterator();
	}
	
	
	//使用内部类来实现具体的iterator  面向接口编程
	public class ConcreteIterator implements MyIterator {
		private int cur;
		
		@Override
		public Object first() {
			return list.get(0);
		}@Override
		public boolean hasNext() {
			return cur<list.size()? true : false;
		}@Override
		public boolean isFirst() {
			return cur==0? true : false;
		}@Override
		public boolean isLast() {
			return cur==list.size()-1? true : false;
		}@Override
		public Object last() {
			return list.get(list.size()-1);
		}@Override
		public Object next() {
			if(cur < list.size())
				return list.get(cur++);
			else
				return null;
		}
		
	}
	

}

public class Client {
	public static void main(String[] args) {
		ConcreteAggregate cag = new ConcreteAggregate();
		for(int i=0; i<26; i++) {
			cag.add((char)(i+'a')+"");
		}
		MyIterator iterator = cag.createIterator();
		System.out.print(iterator.first());
		iterator.next();
		while(iterator.hasNext()) {
			System.out.print(" " + iterator.next());
		}
	}
}

 运行结果:

  a b c d e f g h i j k l m n o p q r s t u v w x y z

posted @ 2015-05-30 21:13  Pickle  阅读(340)  评论(0编辑  收藏  举报