



public class Order {
//餐桌号码
private int diningTable;
//所下的餐品及份数
private Map<String,Integer> foodDir=new HashMap<String,Integer>();
public int getDiningTable() {
return diningTable;
}
public void setDiningTable(int diningTable) {
this.diningTable = diningTable;
}
public Map<String, Integer> getFoodDir() {
return foodDir;
}
public void setFood(String name,int num) {
foodDir.put(name,num);
}
}
//厨师类
public class SeniorChef {
public void makeFood(String name,int num){
System.out.println(num+"份"+name);
}
}
public interface Command {
void execute();
}
//具体的命令类
public class OrderCommand implements Command {
//持有接收者对象
private SeniorChef receiver; //厨师
private Order order;
public OrderCommand(SeniorChef receiver, Order order) {
this.receiver = receiver;
this.order = order;
}
@Override
public void execute() {
System.out.println(order.getDiningTable()+"桌的订单:");
Map<String, Integer> foodDir = order.getFoodDir();
//遍历
Set<String> keySet = foodDir.keySet();
for (String foodname : keySet) {
receiver.makeFood(foodname,foodDir.get(foodname));
}
System.out.println(order.getDiningTable()+"桌的饭准备完毕!!!");
}
}
//服务员类(属于请求者角色)
public class Waitor {
//持有多个命令对象
private List<Command> commands=new ArrayList<>();
public void setCommand(Command cmd){
//将cmd对象存储到list集合中
commands.add(cmd);
}
//发起命令功能 喊 订单来了
public void orderUp(){
System.out.println("xxx服务员:厨师 ,新订单来了...");
//遍历
for (Command command : commands) {
if (command!=null){
command.execute();
System.out.println("=====================");
}
}
}
}
public class Client {
public static void main(String[] args) {
//创建第一个订单对象
Order order1=new Order();
order1.setDiningTable(1);
order1.setFood("炒鸡蛋",10);
order1.setFood("可乐",8);
//创建第2个订单对象
Order order2=new Order();
order2.setDiningTable(2);
order2.setFood("汉堡",22);
order2.setFood("刚刚乐",18);
//创建厨师对象
SeniorChef receiver=new SeniorChef();
//创建命令对象
OrderCommand cmd1=new OrderCommand(receiver,order1);
OrderCommand cmd2=new OrderCommand(receiver,order2);
//创建调用者(服务员对象)
Waitor invoke=new Waitor();
invoke.setCommand(cmd1);
invoke.setCommand(cmd2);
//让服务员发起命令
invoke.orderUp();
}
}

好麻烦啊这模式

Runable是一个典型命令模式,Runnable担当命令的角色,Thread充当的是调用者,start方法就是其执行方法

被折叠的 条评论
为什么被折叠?



