当在java中遍历一个数组时,可以使用下标的方式。但是当底层存储结构变化时(比如换成链表),这种方式就不管用了。通过将循环变量i抽象化、通用化后形成迭代器,这样就可以通用于各种存储结构。这种模式就叫做迭代器模式。
类图如下:

Aggregate代表集合接口,这里BookShelf实现此接口,代表书架。Iterator接口代表迭代器,BookShelfIterator实现此接口,代表书架迭代器。
代码:
1 | public class BookShelf implements Aggregate { |
1 | public class BookShelfIterator implements Iterator { |
注意BookShelf中iterator()方法的返回值是Iterator,只要实现了这个接口都可以作为返回值,这就降低了耦合性。给出的代码只是正常迭代,实际上可以反着迭代,跳着迭代等各种花式迭代。如果有Main函数需要迭代书架,也只需得到迭代器即可,而不用管BookShelf中到底是怎么存放书本的。如果BookShelf需要更改存储方式,那么main函数也完全不用变。