小明准备使用面向对象的方法设计一个快餐店的简单游戏:
游戏中有顾客、服务员、菜品和厨师。
每个顾客都有一个服务员帮助点菜,并且可以点多个菜;
每道菜都由指定厨师制作不同的菜可能由不同的厨师制作;
顾客跟服务员点完菜后,服务员通知后厨做菜。
请帮助小明选择一个合适的模式进行设计。
在实现的过程中,参考了大佬 https://blog.csdn.net/xxiaoEmma/article/details/102926595 的解决方案,哈希表确实便捷。
下面是本憨憨的实现:
package Mr_Ming;
public class Customer {
private Waiter waiter;
//每个顾客都有一个服务员帮忙点菜
public Customer() {
waiter = new Waiter();
}
public void Order(Dish dish) {
//点菜dish
waiter.getOrder(dish);
}
}
package Mr_Ming;
import java.util.HashMap;
public class Waiter {
private HashMap<String,Chief>map; // Hash表用来保存每个厨师对应一个菜
public Waiter() {
map = new HashMap<String, Chief>();
Chief chief_example = new Chief("example_chief");
map.put("example", chief_example);
} //服务员掏出了菜单
public void getOrder(Dish dish) { // 服务员接收到指定的菜单找厨师做菜
System.out.println(map.get(dish.name).name);
map.get(dish.name).cook();
}
}
package Mr_Ming;
public class Dish {
public String name; //菜肴的名称
//private Chief chief; //每道菜都由不同的厨师制作
public Dish(String n) { //初始化函数
name=n;
}
public void cook(Chief chief) { //由指定的chief做菜
chief.cook();
}
}
package Mr_Ming;
public class Chief {
public String name; //厨师的名称
public Chief(String n) {
name = n;
}
public void cook() {
System.out.println("做菜");
}
}
package Mr_Ming;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Customer customer = new Customer();
Dish dish = new Dish("example");
customer.Order(dish);
}
}