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();
        }
    }
    
  • 相关阅读:
    UWP取出图片主色调
    UWP上可用的GB2312编码
    嵌入的资源 和 Resource
    WPF 斜角border
    .net core初试 --- 控制台程序
    Python初学手记----在window系统中安装环境
    我的第一个网络爬虫 C#版 福利 程序员专车
    使用FFMpeg命令行录屏推rtmp流
    WPF制作表示透明区域的马赛克画刷
    WPF之坑——surface触控失灵之谜
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10165465.html
Copyright © 2011-2022 走看看