迭代器(iterator)模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
如果你有一个统一的方法访问聚合中的每一个对象,你就可以编写多态的代码和这些聚合搭配,使用。迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象。这不仅让聚合的接口和实现变得更简洁,也可以让聚合更专注在它所应该专注的事情上面(也就是管理对象集合),而不必去理会遍历的事情。
下面用一个具体实例来加以说明。
我们模拟了一个西餐厅、一个煎饼屋和一个咖啡厅,现在我们想要让顾客在同一个地方能够同时点这三种餐馆的菜色。
在原来的菜单实现中,西餐厅的菜单用数组
来记录菜单项,煎饼屋的菜单用ArrayList
来记录菜单项,而咖啡厅的菜单用Hashtable
来记录菜单项。
我们抽取出的菜单接口为
import java.util.Iterator;
public interface Menu {
public Iterator createIterator();
}
菜单项的类为
public class MenuItem {
String name;
String description;
boolean vegetarian;
double price;
public MenuItem(String name,
String description,
boolean vegetarian,
double price)
{
this.name = name;
this.description = description;
this.vege