14.迭代器模式(Iterator Pattern)

1.定义

提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。

目前是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发。

 

2.类型

行为类模式

 

3.类图

4.迭代器模式的使用场景

扫描二维码关注公众号,回复: 1302145 查看本文章

迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器。
但是,由于容器与迭代器的关系太密切了,所以大多数语言在实现容器的时候都给提供了迭代器,并且这些语言提供的容器和迭代器在绝大多数情况下就可以满足我们的需要,所以现在需要我们自己去实践迭代器模式的场景还是比较少见的,我们只需要使用语言中已有的容器和迭代器就可以了。

5.迭代器模式的通用代码

只给出迭代器的抽象类,至于容器类请参考Java的容器。

 

package _14IteratorPattern;

/**
 *  抽象迭代器,继承Iterator接口
 */
public abstract class Iterator<E> implements java.util.Iterator<E> {

	// 判断当前指针是否已经到了队尾
	@Override
	public boolean hasNext() {
		return false;
	}

	// 获取下一个E
	@Override
	public E next() {
		return null;
	}

	// 删除当前E
	@Override
	public void remove() {
		
	}

}

6.迭代器模式的四个角色

  • Iterator抽象迭代器:抽象迭代器负责定义访问和遍历元素的接口,而且基本上有固定的三个方法(请参考上面的代码)
  • ConcreteIterator具体迭代器:具体迭代器角色要实现迭代器接口,完成容器元素的遍历
  • Aggregate抽象容器:容器角色负责提供创建具体迭代器的接口,Java中是iterator()方法。
  • ConcreteAggregate具体容器

7.迭代器模式的优点

  • 简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了。
  • 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。
  • 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。

8.迭代器模式的缺点

对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像ArrayList,我们宁可愿意使用for循环和get方法来遍历集合。

猜你喜欢

转载自wangwengcn.iteye.com/blog/1724604