当在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
函数也完全不用变。