您的位置:首页 > 编程语言 > Java开发

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());
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: