迭代器模式:提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。

package com.hufei.learnDesignPattern.improve;
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 boolean hasNext() {
if(position >= items.length || items[position] == null){
return false;
}else{
return true;
}
}
public Object next() {
MenuItem menuItem = items[position];
position = position + 1;
return menuItem;
}
}
//DinerMenu什么都不需要改,只需要增加一个createIterator()方法。
public class DinerMenu {
static final int MAX_ITEMS = 6;
int numberOfItems = 0;
MenuItem[] menuItems;
public DinerMenu(){
menuItems = new MenuItem[MAX_ITEMS];
}
public void addItem(String name ,String description, boolean vegetarian, double price){
MenuItem menuItem = new MenuItem(name,description,vegetarian,price);
if(numberOfItems >= MAX_ITEMS){
System.err.println("Sorry, menu is full! Can't add item to menu");
} else{
menuItems[numberOfItems] = menuItem;
numberOfItems = numberOfItems +1 ;
}
}
//不再需要MenuItems方法
/* public MenuItem[] getMenuItems(){
return this.menuItems;
}*/
public Iterator createIterator(){
return new DinerMenuIterator(menuItems);
}
//还有菜单的其他方法
}
public class Waitress {
PancakeHouseMenu pancakeHouseMenu;
DinerMenu dinerMenu;
public Waitress(PancakeHouseMenu pancakeHouseMenu, DinerMenu dinerMenu) {
super();
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
public void printMenu(){
Iterator pancakeIterator = this.pancakeHouseMenu.createIterator();
Iterator dinerIterator = dinerMenu.createIterator();
System.out.println("MENU/n----/nBREAKFAST");
printMenu(pancakeIterator);
System.out.println("MENU/n----/nLUNCH");
printMenu(dinerIterator);
}
public void printMenu(Iterator it){
while(it.hasNext()){
MenuItem menuItem = (MenuItem)it.next();
System.out.print(menuItem.getName()+", ");
System.out.print(menuItem.getPrice()+"-- ");
System.out.println(menuItem.getDescription());
}
}
}

799

被折叠的 条评论
为什么被折叠?



