和上一篇不同的是
在这个模式里面,直接有个接口,通过接口进行处理
集合菜单:
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();
}
}