本文介绍了GoF中的迭代器模式。
模式推演
对不同的聚类进行遍历:
对各种数据类型进行遍历是常做的事,例如:
对一个数组:
1 | Item items[5]; |
对一个ArrayList:
1 | ArrayList<Item> items; |
由于遍历做的事情是一样的,能不能将遍历这一操作封装起来,使得对多种数据类型的遍历都通过一致的接口,我们先整理下遍历所需要的功能,需要:
- 判断结尾;
- 移动到下一个;
- 有时,需要移除某一个;
根据功能需求,我们新建一个接口,称为迭代器:
1 | public interface Iterator { |
这样,我们既可以实现遍历的功能,又不会暴露内部的表示方式(ArrayList, HashMap等)。
OO原则(单一责任):一个类应该只有一个引起变化的原因
如果不使用迭代器,在原来的数据类型中增加方法也是可以的,但是这违背了单一责任原则,给类的维护增加了复杂度。
定义
迭代器模式(Iterator Pattern):提供了一种方法顺序访问一个聚类对象的各个元素,而又不暴露其内部的表示。
类图: