迭代器模式(迭代器模式2)

和上一篇不同的是

在这个模式里面,直接有个接口,通过接口进行处理

集合菜单:

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();
    }
}

猜你喜欢

转载自www.cnblogs.com/java214/p/11800903.html