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

来源:互联网 发布:北京行知实验小学咋样 编辑:程序博客网 时间: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();    }}

原创粉丝点击