//抽象命令public abstract class Command { protected Barbecuer receiver; public Command(Barbecuer receiver){ this.receiver=receiver; }// 执行命令 abstract public void ExcuteCommand();}// 烤肉串者 具体的命令public class Barbecuer {// 烤羊肉 public void BakeMutton(){ System.out.println("烤羊肉串!"); }// 烤鸡翅 public void BakeChickenWing(){ System.out.println("烤鸡翅!"); }}// 烤羊肉串命令 与实现分离public class BakeMuttonCommand extends Command{ public BakeMuttonCommand(Barbecuer receiver) { super(receiver); // TODO Auto-generated constructor stub } @Override public void ExcuteCommand() { receiver.BakeMutton(); }}// 烤鸡翅命令public class BakeChickenWingCommand extends Command{ public BakeChickenWingCommand(Barbecuer receiver) { super(receiver); // TODO Auto-generated constructor stub } @Override public void ExcuteCommand() { receiver.BakeChickenWing(); }}// 服务员执行请求public class Waiter { private ArrayList<Command> orders=new ArrayList<Command>();// 设置订单 public void SetOrder(Command command){ orders.add(command); Date date = new Date(); SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss"); System.out.println("增加订单"+command.toString()+"时间:"+dateFormat.format(date)); }// 取消订单 public void CancelOrder(Command command){ orders.remove(command); Date date = new Date(); SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss"); System.out.println("取消订单"+command.toString()+"时间:"+dateFormat.format(date)); }// 全部执行 public void Notify(){ for (Command command : orders) { command.ExcuteCommand(); } }}public class Test { public static void main(String[] args) {// 开店前准备 Barbecuer barbecuer =new Barbecuer(); Command bakeMuttonCommand = new BakeMuttonCommand(barbecuer); Command bakeChickenWingCommand = new BakeChickenWingCommand(barbecuer); Waiter girl = new Waiter()// 开门营业 顾客点菜 girl.SetOrder(bakeMuttonCommand); girl.SetOrder(bakeChickenWingCommand);// 取消订单 girl.CancelOrder(bakeChickenWingCommand);// 点单完毕,通知厨房 girl.Notify(); }}