zoukankan      html  css  js  c++  java
  • 命令模式【行为模式】

    命令模式

    Encapsulate a request as an object,thereby letting you parameterize clients with
    different requests,queue or log requests,and support undoable operations.
    将一个请求封装为一个对象,从而允许你对客户端的不同请求,队列或日志请求参数化,并支持撤销操作。
    
    public class Command {
        /**
         * 命令模式:
         * Encapsulate a request as an object,thereby letting you parameterize clients with
         * different requests,queue or log requests,and support undoable operations.
         * 将一个请求封装为一个对象,从而允许你对客户端的不同请求,队列或日志请求参数化,并支持撤销操作。
         */
        @Test
        public void all() {
            final AddCommand addCommand = AddCommand.builder().build();
            final UpdateCommand updateCommand = UpdateCommand.builder().build();
            final Invoker invoker = Invoker.builder().build();
    
            invoker.setCommand(addCommand);
            invoker.invoke();
    
            invoker.setCommand(updateCommand);
            invoker.invoke();
        }
    
    }
    /**
     * 1)有效的操作行为
     */
    interface IOperate {
        void find();
    
        void add();
    
        void update();
    
        void delete();
    }
    
    /**
     * 2)具体的行为实现者:UCD 组支持的操作
     */
    @Slf4j
    class UCD implements IOperate {
    
        @Override
        public void find() {
            log.info("找到 UCD 组");
        }
    
        @Override
        public void add() {
            log.info("UCD 组增加一项需求");
        }
    
        @Override
        public void update() {
            log.info("UCD 组修改一项需求");
        }
    
        @Override
        public void delete() {
            log.info("UCD 组取消一项需求");
        }
    
    }
    
    /**
     * UI 组支持的操作
     */
    @Slf4j
    class UI implements IOperate {
    
        @Override
        public void find() {
            log.info("找到 UI 组");
        }
    
        @Override
        public void add() {
            log.info("UI 组增加一项需求");
        }
    
        @Override
        public void update() {
            log.info("UI 组修改一项需求");
    
        }
    
        @Override
        public void delete() {
            log.info("UI 组取消一项需求");
    
        }
    
    }
    
    /**
     * Coder 组支持的操作
     */
    @Slf4j
    class Coder implements IOperate {
    
        @Override
        public void find() {
            log.info("找到代码组");
        }
    
        @Override
        public void add() {
            log.info("代码组增加一项需求");
        }
    
        @Override
        public void update() {
            log.info("代码组修改一项需求");
        }
    
        @Override
        public void delete() {
            log.info("代码组删除一项需求");
        }
    
    }
    
    /**
     * 3)抽象命令类,指定了所有有效的操作
     */
    abstract class ACommand {
        protected final IOperate ucd = new UCD();
        protected final IOperate ui = new UI();
        protected final IOperate coder = new Coder();
    
        abstract public void execute();
    }
    
    /**
     * 4)具体命令类:新增一个功能
     */
    @Builder
    class AddCommand extends ACommand {
    
        @Override
        public void execute() {
            ucd.find();
            ucd.add();
            ui.find();
            ui.add();
            coder.find();
            coder.add();
        }
    }
    
    /**
     * 修改一个功能
     */
    @Builder
    class UpdateCommand extends ACommand {
    
        @Override
        public void execute() {
            ui.find();
            ui.update();
            coder.find();
            coder.update();
        }
    
    }
    
    /**
     * 5)命令执行者
     */
    @Builder
    class Invoker {
        private ACommand command;
    
        public void setCommand(ACommand command) {
            this.command = command;
        }
    
        public void invoke() {
            command.execute();
        }
    }
    
  • 相关阅读:
    solr jvm参数内存自动计算
    记一次使用Chrome修改useragent
    如何查看本机中已安装的.Net Framework版本
    经典实例 PetShop 4.0 For .NET 2.0 下载
    Web.Config配置节加密工具
    some command for Nokia IP 740
    JNCIP进阶OSPF MultiArea Configuration
    寒武纪
    Symantec AntiVirus Corporate Edition 10.0 Error: "Can't communicate with the Server Group..."
    心房客
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10165465.html
Copyright © 2011-2022 走看看