zoukankan      html  css  js  c++  java
  • 设计模式之命令模式

    平时我们下馆子吃各种各样的美食时,总会发现我们都是通过服务员来点餐的,而不会直接告诉厨师我们想吃什么。这其中就包含一个设计模式--命令模式。

    代码结构图:

    public abstract class Command {
        protected Barbecuer receiver;
        public Command(Barbecuer receiver){
            this.receiver = receiver;
        }
        public abstract void executeCommand();
    }
    public class BakeWingCommand extends Command{
        public BakeWingCommand(Barbecuer receiver){
            super(receiver);
        }
    
        @Override
        public void executeCommand() {
            // TODO Auto-generated method stub
            receiver.bakeChickenWing();
        }
    }
    public class BakeMuttonCommand extends Command{
        public BakeMuttonCommand(Barbecuer receiver){
            super(receiver);
        }
    
        @Override
        public void executeCommand() {
            // TODO Auto-generated method stub
            receiver.bakeMutton();
        }
    }
    public class Barbecuer {
        public void bakeMutton(){
            System.out.println("烤羊肉串");
        }
        public void bakeChickenWing(){
            System.out.println("烤鸡翅");
        }
    }
    public class Waiter1 {
        private List<Command> orders = new ArrayList<Command>();
        public void setOrder(Command command){
            orders.add(command);
            System.out.println("增加菜单:" + new Date());
        }
        //取消订单
        public void cancelOrder(Command command){
            orders.remove(command);
            System.out.println("取消订单:" + new Date());
        }
        public void orderNotify(){
            for(Command cmd : orders){
                cmd.executeCommand();
            }
        }
    }
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Barbecuer boy = new Barbecuer();
            Command bakeMutton1 = new BakeMuttonCommand(boy);
            Command bakeMutton2 = new BakeMuttonCommand(boy);
            Command bakeChickenWing = new BakeWingCommand(boy);
            
            Waiter1 girl1 = new Waiter1();
            
            girl1.setOrder(bakeMutton1);
            girl1.setOrder(bakeMutton2);
            girl1.setOrder(bakeChickenWing);
            girl1.orderNotify();
        }
    
    }

    命令模式: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

    命令模式的作用:

    1.能较容易地设计一个命令队列。

    2.在需要的情况下,可以较容易地将命令记入日志。

    3.允许接受请求的一方决定是否要否决请求。

    4.可以容易地实现请求的撤销和重做。

    5.由于加进新的命令模式不影响其他类,因此增加新的具体命令很容易。

  • 相关阅读:
    小甲鱼PE详解之输入表(导出表)详解(PE详解09)
    小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
    小甲鱼PE详解之输入表(导入表)详解(PE详解07)
    小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
    小甲鱼PE详解之区块表(节表)和区块(节)续(PE详解05)
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    天大 ACM 1090. City hall
    C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    Integer Inquiry -TJU1112
    天大acm 题号1002 Maya Calendar
  • 原文地址:https://www.cnblogs.com/shicaiyou/p/9360843.html
Copyright © 2011-2022 走看看