二十三种设计模式之迭代器模式

xiaoxiao2021-02-28  155

迭代器

应用场景:餐厅合并 菜单合并打印

public interface Iterator { public boolean hasNext(); public Object next(); } public class Waitress { private ArrayList<Iterator> iterators = new ArrayList<Iterator>(); public Waitress() { } public void addIterator(Iterator iterator){ iterators.add(iterator); } public void printMenu(){ Iterator iterator; MenuItem menuItem; for(int i=0,len=iterators.size();i<len;i++){ iterator = iterators.get(i); while (iterator.hasNext()){ menuItem =(MenuItem) iterator.next(); System.out.println(menuItem.getName()+"***"+menuItem.getPrice()+"***"+menuItem.getPrice()); } } } } public class MenuItem { private String name,descriptoin; private boolean vegetable; private float price; public MenuItem(String name, String descriptoin, boolean vegetable, float price) { this.name = name; this.descriptoin = descriptoin; this.vegetable = vegetable; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescriptoin() { return descriptoin; } public void setDescriptoin(String descriptoin) { this.descriptoin = descriptoin; } public boolean isVegetable() { return vegetable; } public void setVegetable(boolean vegetable) { this.vegetable = vegetable; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } } public class DinerMenu { private final static int Max_Items=5; public int numberOfItems=0; private MenuItem[] menuItems; public Iterator getIterator(){ return new DinerIterator(); } class DinerIterator implements Iterator{ private int position; public DinerIterator(){ position = 0; } @Override public boolean hasNext() { if(position < numberOfItems){ return true; } return false; } @Override public Object next() { MenuItem menuItem = menuItems[position]; position++; return menuItem; } } public DinerMenu(){ menuItems=new MenuItem[Max_Items]; addItem("vegetable Blt","boiled egg&toast&cabbage",true,3.99f); addItem("Blt","fried eggs&toast",true,3.59f); addItem("bean coup","fresh stawberry",true,3.29f); addItem("hot dog","toast&sausage",true,2.59f); } public void addItem(String name ,String description,boolean vegetable,float price){ MenuItem menuItem = new MenuItem(name,description,vegetable,price); if(numberOfItems>=Max_Items){ System.err.println("sorry,menu is full!can not add"); }else { menuItems[numberOfItems]=menuItem; numberOfItems++; } } public static int getMax_Items() { return Max_Items; } public int getNumberOfItems() { return numberOfItems; } public void setNumberOfItems(int numberOfItems) { this.numberOfItems = numberOfItems; } public MenuItem[] getMenuItems() { return menuItems; } public void setMenuItems(MenuItem[] menuItems) { this.menuItems = menuItems; } } public class CakeHouseMenu { private ArrayList<MenuItem> menuItems; public Iterator getIterator(){ return new CakeHouseIterator(); } class CakeHouseIterator implements Iterator{ private int position=0; public CakeHouseIterator(){ position=0; } @Override public boolean hasNext() { if(position<menuItems.size()){ return true; } return false; } @Override public Object next() { MenuItem menuItem = menuItems.get(position); position++; return menuItem; } } public CakeHouseMenu() { menuItems = new ArrayList<MenuItem>(); addItem("KFC Cake Breakfast","boiled egg&toast&cabbage",true,3.99f); addItem("MDL Cake Breakfast","fried eggs&toast",true,3.59f); addItem("Stawberry cake","fresh stawberry",true,3.29f); addItem("Reguler Cake Breakfast","toast&sausage",true,2.59f); } public void addItem(String name ,String description,boolean vegetable,float price){ MenuItem menuItem = new MenuItem(name,description,vegetable,price); menuItems.add(menuItem); } public ArrayList<MenuItem> getMenuItems() { return menuItems; } public void setMenuItems(ArrayList<MenuItem> menuItems) { this.menuItems = menuItems; } } public class MainTest { public static void main(String[] args) { iteratormode.iterator.Waitress waitress = new Waitress(); CakeHouseMenu cakeHouseMenu = new CakeHouseMenu(); DinerMenu dinerMenu = new DinerMenu(); waitress.addIterator(cakeHouseMenu.getIterator()); waitress.addIterator(dinerMenu.getIterator()); waitress.printMenu(); } }

转载请注明原文地址: https://www.6miu.com/read-58583.html

最新回复(0)