什么是命令模式(Command)?

102 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    将请求以命令的形式统一封装。
  2. 类图
    在这里插入图片描述
  3. 实例
interface Order {
        /**
         * 执行命令
         */
        void execute();
    }

    static class Request {

        public void buy () {
            System.out.println("buy something");
        }

        public void sell () {
            System.out.println("sell something");
        }
    }

    static class Buy implements Order {
        private Request request;

        public Buy (Request request) {
            this.request = request;
        }

        @Override
        public void execute() {
            request.buy();
        }
    }

    static class Sell implements Order {
        private Request request;

        public Sell (Request request) {
            this.request = request;
        }

        @Override
        public void execute() {
            request.sell();
        }
    }

    static class Broker {
        List<Order> orders;

        public Broker () {
            orders = new ArrayList<>(16);
        }

        public void addOrder (Order order) {
            orders.add(order);
        }

        /**
         * 职责链模式
         */
        public void placeOrders () {
            orders.forEach(Order::execute);
            orders.clear();
        }
    }
  1. 测试
public static void main(String[] args) {
        Request request = new Request();

        Order buy = new Buy(request);
        Order sell = new Sell(request);

        Broker broker = new Broker();
        broker.addOrder(buy);
        broker.addOrder(sell);
        broker.placeOrders();
    }

运行结果:

buy something
sell something

想看更多吗?请访问:设计模式