1. //抽象命令
    2. public abstract class Command {
    3. protected Barbecuer receiver;
    4. public Command(Barbecuer receiver){
    5. this.receiver=receiver;
    6. }
    7. // 执行命令
    8. abstract public void ExcuteCommand();
    9. }
    10. // 烤肉串者 具体的命令
    11. public class Barbecuer {
    12. // 烤羊肉
    13. public void BakeMutton(){
    14. System.out.println("烤羊肉串!");
    15. }
    16. // 烤鸡翅
    17. public void BakeChickenWing(){
    18. System.out.println("烤鸡翅!");
    19. }
    20. }
    21. // 烤羊肉串命令 与实现分离
    22. public class BakeMuttonCommand extends Command{
    23. public BakeMuttonCommand(Barbecuer receiver) {
    24. super(receiver);
    25. // TODO Auto-generated constructor stub
    26. }
    27. @Override
    28. public void ExcuteCommand() {
    29. receiver.BakeMutton();
    30. }
    31. }
    32. // 烤鸡翅命令
    33. public class BakeChickenWingCommand extends Command{
    34. public BakeChickenWingCommand(Barbecuer receiver) {
    35. super(receiver);
    36. // TODO Auto-generated constructor stub
    37. }
    38. @Override
    39. public void ExcuteCommand() {
    40. receiver.BakeChickenWing();
    41. }
    42. }
    43. // 服务员执行请求
    44. public class Waiter {
    45. private ArrayList<Command> orders=new ArrayList<Command>();
    46. // 设置订单
    47. public void SetOrder(Command command){
    48. orders.add(command);
    49. Date date = new Date();
    50. SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
    51. System.out.println("增加订单"+command.toString()+"时间:"+dateFormat.format(date));
    52. }
    53. // 取消订单
    54. public void CancelOrder(Command command){
    55. orders.remove(command);
    56. Date date = new Date();
    57. SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
    58. System.out.println("取消订单"+command.toString()+"时间:"+dateFormat.format(date));
    59. }
    60. // 全部执行
    61. public void Notify(){
    62. for (Command command : orders) {
    63. command.ExcuteCommand();
    64. }
    65. }
    66. }
    67. public class Test {
    68. public static void main(String[] args) {
    69. // 开店前准备
    70. Barbecuer barbecuer =new Barbecuer();
    71. Command bakeMuttonCommand = new BakeMuttonCommand(barbecuer);
    72. Command bakeChickenWingCommand = new BakeChickenWingCommand(barbecuer);
    73. Waiter girl = new Waiter()
    74. // 开门营业 顾客点菜
    75. girl.SetOrder(bakeMuttonCommand);
    76. girl.SetOrder(bakeChickenWingCommand);
    77. // 取消订单
    78. girl.CancelOrder(bakeChickenWingCommand);
    79. // 点单完毕,通知厨房
    80. girl.Notify();
    81. }
    82. }