二十三种设计模式之迭代器模式
来源:互联网 发布:北京行知实验小学咋样 编辑:程序博客网 时间:2024/05/17 23:30
迭代器
应用场景:餐厅合并 菜单合并打印
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(); }}
阅读全文
0 0
- 二十三种设计模式之迭代器模式
- 二十三 设计模式之桥梁模式
- 二十三种设计模式之行为型模式之迭代器模式
- [设计模式]二十三种设计模式
- 二十三种设计模式之观察者模式简述
- 二十三种设计模式之单例模式
- 二十三种设计模式之装饰者模式
- 二十三种设计模式之工厂模式
- 二十三种设计模式之命令模式
- 二十三种设计模式之适配器模式
- 二十三种设计模式之外观模式
- 二十三种设计模式之模板模式
- 二十三种设计模式之组合模式
- 二十三种设计模式之状态模式
- 二十三种设计模式之代理模式(一)
- 二十三种设计模式之桥接模式
- 二十三种设计模式之生成器模式
- 二十三种设计模式之责任链模式
- 懂点网站交互(3):广告牌设计101法则
- 如何搭建SignalR服务器和客户端(c#)
- BZOJ 1010: [HNOI2008]玩具装箱toy【斜率优化】
- 005_字面量和变量
- POJ 3414 Pots 我没有用广搜做
- 二十三种设计模式之迭代器模式
- C语言数据结构之栈篇
- 几种基本的排序方法
- 去除ArrayList集合中的重复自定义对象元素
- L2-004. 这是二叉搜索树吗?
- API学习Integer
- theano 提示说No such file or directory lazylinker_ext.pyd
- Javascript 字符串、日期和字符模式总结
- 51nod 1212 无向图最小生成树