Technology-设计模式-迭代器模式

本文介绍了GoF中的迭代器模式。

模式推演

对不同的聚类进行遍历:

对各种数据类型进行遍历是常做的事,例如:

对一个数组:

1
2
3
4
Item items[5];
for(int i = 0; i < items.length; ++i){
Item item = items[i];
}

对一个ArrayList:

1
2
3
4
ArrayList<Item> items;
for(int i = 0; i < items.size(); ++i){
Item item = items.get(i);
}

由于遍历做的事情是一样的,能不能将遍历这一操作封装起来,使得对多种数据类型的遍历都通过一致的接口,我们先整理下遍历所需要的功能,需要:

  • 判断结尾;
  • 移动到下一个;
  • 有时,需要移除某一个;

根据功能需求,我们新建一个接口,称为迭代器:

1
2
3
4
5
public interface Iterator {
boolean hasNext();
Object next();
void remove();
}

这样,我们既可以实现遍历的功能,又不会暴露内部的表示方式(ArrayList, HashMap等)。

OO原则(单一责任):一个类应该只有一个引起变化的原因

如果不使用迭代器,在原来的数据类型中增加方法也是可以的,但是这违背了单一责任原则,给类的维护增加了复杂度。

定义

迭代器模式(Iterator Pattern):提供了一种方法顺序访问一个聚类对象的各个元素,而又不暴露其内部的表示。

类图:

Technology-DesignPattern-Iterator-Class