迭代模式
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://sophi.blog.51cto.com/340461/66348 |
import java.util.*; /* *迭代模式 *提供一种方法顺序访问一个聚合对象中的各个元素, *而又不暴露其内部的表示 */ public class MyIterator { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(new DinerMenu()); list.add(new PancakeHouseMenu()); Waitress waitress = new Waitress(list); waitress.printMenu(); } } //菜单项结构 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 String getDescription() { return description; } public double getPrice() { return price; } public boolean isVegetarian() { return vegetarian; } } //抽象菜单 interface Menu{ public Iterator createIterator(); } //具体菜单 class DinerMenu implements Menu{ static final int MAX_ITEMS = 6; int numberOfItems = 0; MenuItem[] menuItems; public DinerMenu(){ menuItems = new MenuItem[MAX_ITEMS]; addItem("Hotdog","A hot dog,with relish",false,3.05); } 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!"); } else{ menuItems[numberOfItems] = menuItem; numberOfItems = numberOfItems + 1; } } //必须实现 public Iterator createIterator() { return new DinerMenuIterator(menuItems); } } class PancakeHouseMenu implements Menu{ ArrayList menuItems; public PancakeHouseMenu(){ menuItems = new ArrayList(); addItem("Waffles","Waffles,with your blue berries",true,3.59); } public void addItem(String name,String description,boolean vegetarian,double price){ MenuItem menuItem = new MenuItem(name,description,vegetarian,price); menuItems.add(menuItem); } //直接利用java容器自带的iterator来实现 public Iterator createIterator() { return menuItems.iterator(); } } //利用java自带的Iterator接口,必须实现next(),hasNext(),remove() class DinerMenuIterator implements Iterator{ MenuItem[] items; int position = 0; public DinerMenuIterator(MenuItem[] items){ this.items = items; } public Object next(){ MenuItem menuItem = items[position]; position = position + 1; return menuItem; } public boolean hasNext(){ if (position >= items.length || items[position] == null){ return false; } else { return true; } } public void remove(){ throw new UnsupportedOperationException(); } } //一个不错的遍历对象的类 class Waitress{ ArrayList menus; public Waitress(ArrayList menus){ this.menus = menus; } public void printMenu(){ Iterator menuIterator = menus.iterator(); while(menuIterator.hasNext()){ Menu menu = (Menu)menuIterator.next(); printMenu(menu.createIterator()); } } void printMenu(Iterator iterator){ while (iterator.hasNext()) { MenuItem menuItem = (MenuItem) iterator.next(); System.out.println(menuItem.getName()); System.out.println(menuItem.getPrice()); System.out.println(menuItem.getDescription()); } } } 本文出自 ““技”忆” 博客,请务必保留此出处http://sophi.blog.51cto.com/340461/66348 本文出自 51CTO.COM技术博客 |


huixianmaomao
博客统计信息
热门文章
最新评论
友情链接