给餐厅菜单加入一个迭代器
public interface Iterator
{
boolean hasNext();
Object next();
}
public class DinerMenuIterator implements Iterator
{
MenuItem[] items;
int position = 0;
public DinerMenuIterator (MenuItem[] items)
{
this.items = items;
}
public Object next()
{
MenuItem menuItem = items[position];
position = position + 1;
return menuItem;
}
public boolean hasNext()
{
if(position >= items.Length || items[position] == null)
return false;
else
return true;
}
}
用迭代器改写餐厅菜单
public class DinerMenu
{
static final int MAX_ITEMS = 6;
int numberOfItems = 0;
MenuItem[] menuItems;
//构造器在这里
public Iterator createIterator()
{
return new DinerMenuIterator(menuItems);
}
//菜单的其他方法在这里
}
修正女招待的代码
public class Waitress
{
PancakeHouseMenu pancakeHouseMenu;
DinerMenu dinerMenu;
public Waitress(PancakeHouseMenu pancakeHouseMenu,DinerMenu dinerMenu)
{
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
public void printMenu()
{
Iterator pancakeIterator = pancakeHouseMenu.createIterator();
Iterator dinerIterator = dinerMenu .createIterator();
System.out.println("MENU\n----\nBREAKFAST");
printMenu(pancakeIterator);
System.out.println("\nLUNCH");
printMenu(dinerIterator);
}
privatevoid printMenu(Iterator iterator)
{
While(iterator.hasNext())
{
MenuItem menuItem = (MenuItem)iterator.next();
System.out.println(menuItem.getName() + ",");
System.out.println(menuItem.getPrice() + "--");
System.out.println(menuItem.getDescription() );
}
}
}
测试代码:
public class MenuTestDrive
{
public static void main(String args[])
{
PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu ();
DinerMenu dinerMenu = new DinerMenu();
Waitress waitress = new Waitress(pancakeHouseMenu,dinerMenu);
}
}