• 设计模式-命令模式(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

  • 相关阅读:
    oracle11g新建表空间和用户
    ORACLE查询数据中所存在的表,搜索指定的表
    QTP的那些事vbs通用操作数据库函数整理
    Oracle:PL/SQL 中如何使用Array
    QTP的那些事—QTP11+QC11框架整理源码(个人原创)
    QTP的那些事灵活运用其中的datatable对象
    QTP的那些事共享对象库的使用
    zoj 1092 Arbitrage (poj 2240)
    zoj 1655 Transport Goods
    UVA 11292 Dragon of Loowater
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10129729.html
Copyright © 2020-2023  润新知