• 设计模式-命令模式(Command)


    命令模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作,将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。

    角色和职责:

    1.Command:

       声明执行操作的接口

    2.Concrete Command:

        具体实现

    3.Invoker:

      执行者

    4.Receiver:

    接收者

    UML图

    具体代码:

    /**
     * 接收者
     */
    public class Receiver {
        public void action(){
            System.out.println("执行一个命令");
        }
        public void unAction(){
            System.out.println("撤销一个命令");
        }
    }
    /**
     * 命令接口
     */
    public interface Command {
        void execute();//执行
        void undo();//撤回
    }
    /**
     * 具体命令
     */
    public class ConcreteCommand implements Command{
        private Receiver receiver;
    
        public ConcreteCommand(Receiver receiver){
            this.receiver = receiver;
        }
        @Override
        public void execute() {
            receiver.action();
        }
    
        @Override
        public void undo() {
            receiver.unAction();
        }
    }
    /**
     * 调用者
     */
    public class Invoker {
        public Command command;
    
        public Command getCommand() {
            return command;
        }
    
        public void setCommand(Command command) {
            this.command = command;
        }
    
        //执行命令
        public void executeAction(){
            command.execute();
        }
        //撤销命令
        public void undoAction(){
            command.undo();
        }
    }
    public class Main {
        public static void main(String[] args) {
            //创建命令的接收者
            Receiver receiver = new Receiver();
            //创建命令,设定接收者
            Command command = new ConcreteCommand(receiver);
            //创建执行者
            Invoker invoker = new Invoker();
            invoker.setCommand(command);//设置对应的命令
    
            //执行命令
            invoker.executeAction();
            invoker.undoAction();
        }
    }

    结果:

    执行一个命令
    撤销一个命令

    命令模式(Command)的应用效果:
    1)command模式将调用操作的对象和实现该操作的对象解耦
    2)可以将多个命令装配成一个复合命令,复合命令是Composite模式的一个实例
    3)增加新的command很容易,无需改变已有的类

    命令模式(Command)的适用性

        1.抽象出待执行的动作以参数化某对象。

        2.在不同的时刻指定、排列和执行请求。

        3.支持取消操作。

        4.支持修改日志,这样当系统崩溃时,这样修改可以被重做一遍。

        5.用构建在原语操作上的高层操作构造一个系统。

     

     

    源码地址:https://github.com/qjm201000/design_pattern_command.git

  • 相关阅读:
    初识TPOT:一个基于Python的自动化机器学习开发工具
    为你的机器学习模型创建API服务
    iview 表格的多选框如何默认选中某项
    在uni-app中使用阿里巴巴图标库字体图标
    uni-app添加自定义底部导航栏,实现根据权限动态切换底部栏目的功能
    iview表格点击整行都可行切换前面的单选按钮或者多选按钮的状态
    uni-app引入vconsole调试移动端项目
    vue+view中的折叠面板点击表头阻止面板的收缩事件
    vue项目中判断文字内容超出n行显示详情按钮
    uni-app给顶部导航栏添加自定义字体图标
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10129729.html
Copyright © 2020-2023  润新知