Java设计模式学习-命令模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/85402720

介绍

  • 命令模式:将一个请求封装为一个对象 , 从而使我们可用不同的请求对客户端进行参数化 , 对请求排队或记录请求日志 , 以及支持可撤销的操作 。 也称之为 : 动作Action模式 , 事物transction模式

结构

  • Command 抽象命令类
  • ConcreteCommand 具体命令类
  • Invoker 调用者/请求者
  • -- 请求的发送者 , 它通过命令对象来执行请求 。一个调用者并不需要再设计时确定确定其接受者,因此它只与抽象命令类之间存在关联。在程序运行时,将调用命令对象的executer() , 间接调用接受者的相关操作。
  • Receiver 接受者
  • 接受者执行与请求相关的操作 , 具体实现对请求的业务处理。
  • 未抽象前, 实际执行操作内容的对象。
  • Client客户类
  • 在客户类中需要创建调用者对象 ,具体命令类对象, 在创建具体命令对象时指定对应的接受者 。发送者和接受者之间没有存在直接关系 , 都通过命令对象间接调用。

uml类图如下

1),创建具体命令执行者对象类

package com.tuogo.command;

/**真正命令的执行者
 * @author 晓电脑
 */
public class Receive {

    public void action(){
        System.out.println("方法已经被执行");
    }
}

2),创建Command类和它的实现类

package com.tuogo.command;

/**命令抽象类
 * @author 晓电脑
 */
public interface Command {
    /**
     * 这个方法是一个返回结果为空的方法
     * 在实际项目中,可以根据需求设计多个不同的方法
     */
    void excute();

}

class ConcreateCommand implements Command {
    /**
     * 真正命令的执行者
     */
    private Receive receive;

    public ConcreateCommand(Receive receive) {
        this.receive = receive;
    }

    @Override
    public void excute() {
        //System.out.println("命令执行前增加自己的业务方法");
        receive.action();
        //System.out.println("命令执行后增加自己的业务方法");
    }

}

3),创建Invoker类

package com.tuogo.command;

/**调用者/发起者
 * @author 晓电脑
 */
public class Invoker {
    /**
     * 也可以通过List<Command> 容纳很多命令对象 进行批量处理
     * 数据库底层的事物管理就是类似于这样的结构
     */
    private Command command;

    public Invoker(Command command) {
        this.command = command;
    }

    /**
     * 业务方法 用于调用命令类的方法
     */
    public void look() {
        command.excute();
    }
}

4),创建客户端进行测试

/**客户端测试类
 * @author 晓电脑
 */
public class Client {
    public static void main (String[] args) {

        ConcreateCommand command = new ConcreateCommand(new Receive());

        Invoker invoker = new Invoker(command);
        invoker.look();

        //也可以直接使用 但是这样程序就很难进行扩展,不适用于程序的各种变化
       // new Receive().action();


    }
}

运行结果如下

命令模式在开发中常见的场景:

  • Struts2 中,action的整个调用过程中就有命令模式。
  • 数据库事物机制的底层实现。
  • 命令的撤销和恢复。

猜你喜欢

转载自blog.csdn.net/qq_40646143/article/details/85402720