设计模式12-迭代器模式
package DesignPattern;
import java.util.ArrayList;
public class IteratorPattern {
//迭代器一统数组实现和ArrayList实现
//迭代器帮助遍历集合,但是不暴露内部真实实现
public interface Iterator{
boolean hasNext();
Object next();
}
public static class MenuItem{
String name;
String description;
boolean vegetarian;
double price;
public MenuItem(String name,String description,boolean vegetarian,double price){
this.name=name;
this.description=description;
this.vegetarian=vegetarian;
this.price=price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isVegetarian() {
return vegetarian;
}
public void setVegetarian(boolean vegetarian) {
this.vegetarian = vegetarian;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
//两种菜单实现
public static class PancakeHouseMenu{
ArrayList menuItems;
public PancakeHouseMenu() {
this.menuItems = new ArrayList();
addItem("breakfast","pancakes with eggs",true,2.99);
addItem("waffles","waffles with eggs",false,3.59);
}
public void addItem(String name,String description,boolean vegetarian,double price){
menuItems.add(new MenuItem(name,description,vegetarian,price));
}
public ArrayList getMenuItems(){
return menuItems;
}
}
public static class DinerMenu{
static final int MAX_ITEMS=6;
int numOfItems=0;
MenuItem[] menuItems;
DinerMenu(){
menuItems= new MenuItem[MAX_ITEMS];
}
public void addItem(String name,String description,boolean vegetarian,double price){
if(numOfItems>=MAX_ITEMS){
System.out.println("menu is full");
}
else{
menuItems[numOfItems++]=new MenuItem(name,description,vegetarian,price);
}
}
public MenuItem[] getMenuItems(){
return menuItems;
}
}
public static class DinerMenuIterator implements Iterator{
MenuItem[] items;
int position=0;
public DinerMenuIterator(MenuItem[] items) {
this.items = items;
}
@Override
public boolean hasNext() {
if(position>=items.length||items[position]==null){
return false;
}
return true;
}
@Override
public Object next() {
return items[position++];
}
}
public static class PancakeHouseMenuIterator implements Iterator{
java.util.Iterator itemIterator;
public PancakeHouseMenuIterator(ArrayList items) {
this.itemIterator=items.iterator();
}
@Override
public boolean hasNext() {
return itemIterator.hasNext();
}
@Override
public Object next() {
return itemIterator.next();
}
}
}
I'm a fucKing fake coder!