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();
        }
    }
    
  • 相关阅读:
    RHEL 6.3 详细安装教程
    如何利用sendmail发送外部邮件?
    阿里云API网关(14)流控策略
    阿里云API网关(13)请求身份识别:客户端请求签名和服务网关请求签名
    OpenID Connect 是什么?
    OpenID Connect + OAuth2.0
    OAuth是什么?
    OpendID是什么?
    【华为无线路由器】连接【广电光纤入户设备】宽带上网
    windows7.0旗舰版安装后控制面板自带的Microsoft程序
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10165465.html
Copyright © 2011-2022 走看看