Java设计模式_行为型_迭代器模式_如何打印一张菜单
2015-12-29 14:43
211 查看
转载请注明出处:/article/11557488.html
本文出自:【梁敬明的博客】
本文出自:【梁敬明的博客】
1.菜单是怎么打印出来的
每当我们去饭店吃饭的时候,服务员首先都会将菜单拿上来让我们点餐,菜单又是怎么做出来的呢?首先,要有一个一个的特色菜品,然后交由打印机,将菜品打印到菜单上,一张精美的菜单就做了出来。当然菜单只是展示菜品的一张单子,我们不需要知道每道菜的具体做法,只要知道好不好吃就行,至于如何将菜品打印到菜单上,就更不需要去关心了,毕竟是打印机的事情,跟我们吃饭没有什么关系。//这是一个菜品 public class MenuItem { //菜品的名称 private String name; //菜品的价格 private float price; public MenuItem(String name, float price) { this.name = name; this.price = price; } public String getName() { return name; } public float getPrice() { return price; } @Override public String toString() { return "MenuItem [name=" + name + ", price=" + price + "]"; } } //这是一张菜单 public class Menu { private List<MenuItem> items = new ArrayList<MenuItem>(); //将菜品输入打印机中 public Iterator createIterator() { return new MenuIterator(items); } //将菜品添加到菜单中 public void addMenuItem(MenuItem item){ items.add(item); } }
2.菜单打印机的工作原理
对于我们程序员来说,编程喜欢研究源码,吃饭拿到菜单当然要研究下菜单是如何被打印出来的,菜单打印机的工作机制当然不可避免的要研究下。首先要把每个菜品的数据录入打印机中,然后检查打印机,看看还有没有可以打印的菜品,如果有可以打印的菜品,则将当前菜品打印出来,如果没有可以打印的菜品,则表示打印完毕,直接退出即可。//这是打印机 public interface Iterator { // 是否有下一条数据 boolean hasNext(); // 将下一条数据打印出来 Object next(); } //打印菜单的专用机器 public class MenuIterator implements Iterator { // 菜品数据 private List<MenuItem> items; // 当前菜品的索引 private int position; // 将菜品数据录入打印机 public MenuIterator(List<MenuItem> items) { this.items = items; } // 是否还有下一个菜品 @Override public boolean hasNext() { if (items != null && position < items.size()) return true; return false; } // 将制定位置的菜品打印出来 @Override public Object next() { MenuItem menu = items.get(position); position++; return menu; } }
3.打印出属于自己的菜单
实践出真知,那么现在开始随便写一些菜品,将其打印到菜单上,观察一张菜单生产出来的全部工作流程。public class Client { public static void main(String[] args) { // 拿到一张空菜单 Menu menu = new Menu(); // 将菜品添加到指定菜单上 for (int i = 1; i < 10; i++) { menu.addMenuItem(new MenuItem(i + "号", new Random().nextInt(10) + 10)); } // 创建一台打印机,打印菜单中菜品 Iterator iterator = menu.createIterator(); // 是否有下一个菜品 while (iterator.hasNext()) { // 将菜品打印出来 MenuItem item = (MenuItem) iterator.next(); System.out.println(item.toString()); } } }
相关文章推荐
- 使用Eclipse进行远程调试 外加 ant 直接打包到服务器
- Eclipse/myeclipse快捷键大全
- java数据存储
- java 反射: 当Timestamp类型的属性值为null时,设置默认值
- 为了我的java之学
- 关于 Java 数组的 12 个最佳方法
- java bean、List、数组、map和Json的相互转化
- 含有Date和Timestamp的Java和Json互相转化
- java反射机制详解 及 Method.invoke解释 getMethod
- Java @Deprecated注解的作用及传递性
- MyBatis简介与配置MyBatis+Spring+MySql[转]
- 安全认证和授权方式:嵌入式Jetty+Jersey
- Spring 官网下载zip jar
- Spring 官网下载zip jar
- Spring 官网下载zip jar
- Java RMI简单例子HelloWorld
- 安卓学习记录-java-day11
- 安卓项目从eclipse移植到android studio编译失败,因为.9图不标准
- 在Java中String和Date、Timestamp之间的转换
- (错误记录)java.lang.UnsatisfiedLinkError