迭代器模式

迭代器模式:提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。

package com.hufei.learnDesignPattern.improve;
public interface Iterator {
	boolean hasNext();
	Object next();
}

public class DinerMenuIterator implements Iterator {
	MenuItem[] items;
	int position = 0;
	
	public DinerMenuIterator(MenuItem[] items){
		this.items = items;
	}
	public boolean hasNext() {
		if(position >= items.length || items[position] == null){
			return false;
		}else{
			return true;
		}
	}
	public Object next() {
		MenuItem menuItem = items[position];
		position = position + 1;
		return menuItem;
	}
}

//DinerMenu什么都不需要改,只需要增加一个createIterator()方法。
public class DinerMenu {
	static final int MAX_ITEMS = 6;
	int numberOfItems = 0;
	MenuItem[] menuItems;
	
	public DinerMenu(){
		menuItems = new MenuItem[MAX_ITEMS];
	
	}
	
	public void addItem(String name ,String description, boolean vegetarian, double price){
		MenuItem menuItem = new MenuItem(name,description,vegetarian,price);
		
		if(numberOfItems >= MAX_ITEMS){
			System.err.println("Sorry, menu is full! Can't add item to menu");
		} else{
			menuItems[numberOfItems] = menuItem;
			numberOfItems = numberOfItems +1 ;
		}
	}
	
	//不再需要MenuItems方法
/*	public MenuItem[] getMenuItems(){
		return this.menuItems;
	}*/
	public Iterator createIterator(){
		return new DinerMenuIterator(menuItems);
	}
	//还有菜单的其他方法
}

public class Waitress {
	PancakeHouseMenu pancakeHouseMenu;
	DinerMenu dinerMenu;
	public Waitress(PancakeHouseMenu pancakeHouseMenu, DinerMenu dinerMenu) {
		super();
		this.pancakeHouseMenu = pancakeHouseMenu;
		this.dinerMenu = dinerMenu;
	}
	
	public void printMenu(){
		Iterator pancakeIterator = this.pancakeHouseMenu.createIterator();
		Iterator dinerIterator = dinerMenu.createIterator();
		System.out.println("MENU/n----/nBREAKFAST");
		printMenu(pancakeIterator);
		System.out.println("MENU/n----/nLUNCH");
		printMenu(dinerIterator);
		
	}
	
	public void printMenu(Iterator it){
		while(it.hasNext()){
			MenuItem menuItem = (MenuItem)it.next();
			System.out.print(menuItem.getName()+", ");
			System.out.print(menuItem.getPrice()+"-- ");
			System.out.println(menuItem.getDescription());
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值