《Java设计模式之迭代器模式》

《迭代器模式》

  Java中所有Collection下的集合都有一个iterator()方法返回Iterator接口的实现类,用于对该集合的遍历操作,这实际上就使用到了迭代器模式:提供一个方法顺序访问一个聚合对象的每一个元素,而有不暴露该对象的内部实现。

  迭代模式的结构:


 用代码模拟一下迭代器模式:
//抽象迭代器
public interface MyIterator {
	boolean hasNext();
	Object next();
}
//抽象容器
public interface MyList {
	MyIterator createIterator();
	void add(Object obj);
	Object get();
}
//具体容器
public class ConcreteMyList implements MyList {
	
	private List<Object> list = new ArrayList<>();
	
	@Override
	public MyIterator createIterator() {
		return new ConcreteMyIterator(list);
	}

	@Override
	public void add(Object obj) {
		list.add(obj);
	}

	@Override
	public Object get() {
		return createIterator().next();
	}
}
//具体迭代器
public class ConcreteMyIterator implements MyIterator {
	
	private List<Object> list;
	private int pointer;
	public ConcreteMyIterator(List<Object> list) {
		this.list = list;
	}
	
	@Override
	public boolean hasNext() {
		if (pointer < list.size()){
			return true;
		}
		return false;
	}

	@Override
	public Object next() {
		Object obj = list.get(pointer); 
		pointer++;
		return obj;
	}
}
//测试
	public static void main(String[] args) {
		ConcreteMyList list = new ConcreteMyList();
		list.add(1);
		list.add(2);
		list.add(3);
		
		MyIterator iterator = list.createIterator();
		
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
	}

  总结

迭代器的优点:
1.提供了非常简单的遍历方法,客户端无需知道容器的内部结构,通过迭代器就可以轻易的获取元素
2.可以提供多种遍历方式,如正序或者倒序。

  因为Java已经为每一个集合设计好了迭代器,所以我们在使用时往往感觉不到迭代器模式的存在,而且在Java5之后,又有了Iterable接口,使得集合和数组的遍历更加方便。




猜你喜欢

转载自blog.csdn.net/eragon444668/article/details/76538653