zoukankan      html  css  js  c++  java
  • 设计模式-命令模式(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

  • 相关阅读:
    新东方英语学习方法
    最易遭老板“炒”的15种员工
    如何阅读代码
    Window 消息大全使用详解
    英语学习的六大原则
    单用户多角色权限的MSSQL实现
    .Net中的5种事务总结
    一个.Net程序员关于学习的思考顺带思考人生
    Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
    推荐几个win8系统下载比较好的网站
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10129729.html
Copyright © 2011-2022 走看看