迭代器和组合模式
来源:互联网 发布:网络兼职被骗怎么办 编辑:程序博客网 时间:2024/06/11 00:56
迭代器模式
迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示
迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示。
把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。
代码
/** * 菜单类 * 定义 菜单名称、描述、是否为素食和价格 * */public class MenuItem { String name; String description; //是否为素食标识 Boolean vegetarian; double price ; public MenuItem(String name, String description, Boolean vegetarian, double price) { super(); 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 getVegetarian() { return vegetarian; } public void setVegetarian(Boolean vegetarian) { this.vegetarian = vegetarian; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; }}
/** * @author lzlj21@163.com * * 这是一个简单接口,让客户能够取得一个菜单项迭代器 * */public interface Menu { public Iterator createItterator();}
/** * @author lzlj21@163.com * *定义arralist存储菜单的菜单类 */public class PancakeHouseMenu implements Menu { ArrayList menuItms; //使用一个arraylist存储菜单项 /** * 初始化菜单是添加菜单项 */ public PancakeHouseMenu() { menuItms= new ArrayList<>(); /** * 简化菜单内容 */ additem("name1","description1",true,2.99); additem("name2","description2",true,3.99); additem("name3","description3",true,4.99); additem("name4","description4",true,5.99); additem("name5","description5",true,6.99); additem("name6","description6",true,7.99); additem("name7","description7",true,8.99); } /** * 添加菜单项 * * @param name * @param description * @param vegetarian * @param price */ private void additem(String name, String description, boolean vegetarian, double price) { MenuItem item =new MenuItem(name, description, vegetarian, price); menuItms.add(item); } /* * 调用菜单项arraylist的iterator方法 */ @Override public Iterator createItterator() { return menuItms.iterator(); }}
/** * @author lzlj21@163.com * *餐厅菜单迭代器类 */public class DinerMenuIterator implements Iterator<Menu> { MenuItem[] items; int position; // 记录当前数组遍历 的位置 /** * @param items 传入一个菜单项的数组当做参数 */ public DinerMenuIterator(MenuItem[] items) { this.items = items; } /* * 检查我们是否已经取得数组内所以的元素,如果还有元素待遍历,则返回true。 */ @Override public boolean hasNext() { /* * 因为是使用固定长度的数组,所以我们不但要检查是否超出了数组长度, * 也必须检查是否下一项是null,如果是null,就表示没有其他项了。 */ if (position<=items.length||items[position]==null) { return false; }else{ return true; } } @Override public Menu next() { // TODO Auto-generated method stub return null; }}
/** * @author lzlj21@163.com * *定义arralist存储菜单的菜单类 */public class DinerMenu implements Menu { static final int MAX_ITEMS=6; // 控制菜单长度 int numberOfItems=0; //菜单计数器 MenuItem [] menuItems; //菜单存储在数组中 /** * 初始化菜单是添加菜单项 */ public DinerMenu() { menuItems= new MenuItem[MAX_ITEMS]; /** * 简化菜单内容 */ additem("name1","description1",true,2.99); additem("name2","description2",true,3.99); additem("name3","description3",true,4.99); additem("name4","description4",true,5.99); additem("name5","description5",true,6.99); additem("name6","description6",true,7.99); additem("name7","description7",true,8.99); } /** * 添加菜单项 * * @param name * @param description * @param vegetarian * @param price */ private void additem(String name, String description, boolean vegetarian, double price) { MenuItem item =new MenuItem(name, description, vegetarian, price); //监测是否超出菜单长度 if (numberOfItems >=MAX_ITEMS) { System.out.println("sorry,nenu is full! can't add item to menu"); } else { menuItems[numberOfItems]=item; numberOfItems++; } } /* * 调用菜单项arraylist的iterator方法 */ @Override public Iterator createItterator() { return new DinerMenuIterator(menuItems); }}
/** * @author lzlj21@163.com * *定义一个女招待类 *打印菜单 */public class Waitress { Menu pancakeHouseMenu; Menu dinnerMenu; //将菜单项的接口传入,和女招待类解耦合 public Waitress(Menu pancakeHouseMenu, Menu dinnerMenu) { this.pancakeHouseMenu = pancakeHouseMenu; this.dinnerMenu = dinnerMenu; } /** * 打印菜单 */ public void printMenu(){ Iterator pancakeIteator = pancakeHouseMenu.createItterator(); Iterator dinneIterator = dinnerMenu.createItterator(); System.out.println("Menu\n-----\n BREAKFAST"); priintMenu(pancakeIteator); System.out.println("\n LUNCH"); priintMenu(dinneIterator); } /** * 循环打印菜单项 * @param iteator */ private void priintMenu(Iterator iteator) { while (iteator.hasNext()) { MenuItem menuItem = (MenuItem) iteator.next(); System.out.println(menuItem.getName()+", "); System.out.println(menuItem.getPrice()+" -- "); System.out.println(menuItem.getDescription()); } }}
public class MenuTestDrive { public static void main(String[] args) { PancakeHouseMenu pancakeHouseMenu=new PancakeHouseMenu(); DinerMenu dinerMenu =new DinerMenu(); //传入菜单 Waitress waitress=new Waitress(pancakeHouseMenu, dinerMenu); //打印菜单 waitress.printMenu(); }}
阅读全文
1 0
- 迭代器和组合模式
- 迭代器和组合模式
- 设计模式-----迭代器模式和组合模式
- 十、迭代器和组合模式
- First-Head:迭代器模式和组合模式
- 设计模式之迭代器和组合模式
- Java设计模式之迭代器模式和组合模式
- 设计模式之迭代器模式和组合模式
- 迭代器模式和组合模式-《Head First 设计模式》
- QObject 和组合模式
- 桥模式和组合模式
- 迭代器模式和组合模式(管理良好的集合)
- 设计模式——迭代器和组合模式
- 设计模式---继承和组合
- 组合模式学习和思考
- 迭代器与组合模式
- 迭代器与组合模式
- 迭代器与组合模式
- 基于Tcp&UDP协议的简单Socket通信实例(JAVA)
- S5PV210启动详解
- Opatch及PSU下载地址
- QQ第三方联合登录视频教程
- 关于电路
- 迭代器和组合模式
- 百钱买百鸡,公鸡五元一只,母鸡三元一只,小鸡一元三只
- Java类加载器--双亲委派模型
- Dubbo分布式实战视频教程
- C语言小笔记(2)
- 简单购物车Demo
- JAVA SE — Day 13
- ajax 简单示例
- 使用Android Studio 3.0让开源App的源码项目运行起来