和上一篇不同的是
在这个模式里面,直接有个接口,通过接口进行处理
集合菜单:
package com.java214.iteratormode.iterator; import java.util.ArrayList; import com.java214.iteratormode.MenuItem; /** * <p>Title: CakeHouseMenu</p> * <p>Description: 蛋糕房菜单</p> * @author 滕一帆 * @date 2019年11月5日 */ public class CakeHouseMenu { private ArrayList<MenuItem> menuItems;//菜单函数 public CakeHouseMenu() { menuItems = new ArrayList<MenuItem>(); addItem("KFC蛋糕早餐","蛋挞+吐司+汉堡包",true,3.99f); addItem("MDL蛋糕早餐","水果鸡蛋+吐司",false,3.59f); addItem("草莓蛋糕","新鲜草莓",true,3.29f); addItem("甜蛋糕","吐司+糖",true,2.59f); //将菜单全部放入菜单参数中 } private void addItem(String name, String description, boolean vegetable, float price) { MenuItem menuItem = new MenuItem(name, description, vegetable, price); menuItems.add(menuItem); } //定义一个迭代器 public Iterator getIterator() { return new CakeHouseIterator() ;//返回一个迭代器实例 } //内部类实现迭代器 class CakeHouseIterator implements Iterator { //在这个内部类中要实现两个方法 private int position=0;//定位位置 public CakeHouseIterator() { position=0; } @Override public boolean hasNext() { // TODO Auto-generated method stub if(position<menuItems.size()) { return true; } return false; } @Override public Object next() { // TODO Auto-generated method stub MenuItem menuItem =menuItems.get(position); position++; return menuItem; }}; //其他功能代码 }
数组菜单:
package com.java214.iteratormode.iterator; import java.util.ArrayList; import com.java214.iteratormode.MenuItem; public class DinerMenu { private final static int Max_Items = 5; private int numberOfItems = 0; private MenuItem[] menuItems; public DinerMenu() { //构造函数 menuItems=new MenuItem[Max_Items] ;//创建数组实例 addItem("玫瑰蛋糕","玫瑰花+奶油+面粉",true,3.58f); addItem("奶油蛋糕","奶油+面粉",false,3.00f); addItem("武大郎披萨","蔬菜+面粉+调料",true,3.28f); addItem("芝士饼","洋葱+蒜蓉+羊排",false,3.05f); } private 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("参数已满无法添加参数"); } else { menuItems[numberOfItems] = menuItem; numberOfItems++; } } public Iterator getIterator() { return new DinerIterator(); } class DinerIterator implements Iterator { private int position; public DinerIterator() { position = 0; } @Override public boolean hasNext() { // TODO Auto-generated method stub if (position < numberOfItems) { return true; } return false; } @Override public Object next() { // TODO Auto-generated method stub MenuItem menuItem = menuItems[position]; position++; return menuItem; } }; }
两者中只有实现接口时候不一样,因为处理的手法不一致。
接口代码:
package com.java214.iteratormode.iterator; public interface Iterator { public boolean hasNext(); public Object next(); }
还是通过女服务员进行整合两个菜单:
package com.java214.iteratormode.iterator; import java.util.ArrayList; import com.java214.iteratormode.MenuItem; /** * <p>Title: Waitress</p> * <p>Description: </p> * @author 滕一帆 * @date 2019年11月5日 */ 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.getDescription()); } } } public void printBreakfastMenu() { } public void printLunchMenu() { } public void printVegetableMenu() { } }
测试输出:
package com.java214.iteratormode.iterator; public class MainTest { public static void main(String[] args) { Waitress mWaitress=new Waitress(); CakeHouseMenu mCakeHouseMenu = new CakeHouseMenu(); DinerMenu mDinerMenu = new DinerMenu(); mWaitress.addIterator(mCakeHouseMenu.getIterator()); mWaitress.addIterator(mDinerMenu.getIterator()); mWaitress.printMenu(); } }