再战设计模式(十五)之行为型-命令模式

命令模式

介绍:将一个请求封装为一个对象,从而是我们使我们可用不同的请求对客户进行参数化,对请求排队或者记录日志,以及支持可撤销的操作,也称为action模式

角色:

  Command:抽象命令类

  concreteCommand:具体命令类

  Invoke:调用者/请求者

  请求的发送者,它通过命令对象来执行请求,一个调用者并不需要设计的时候确定其接受者,因此它只和抽象命令接口之间存在关系,在程序运行的时候调用命令对象的execute方法,间接调用接受者的相关操作

  receiver:

  接受者执行与请求相关的操作,具体实现对业务的处理

  可以是不同的接受者,或者定义抽象类

  client客户端:

  在客户类中需要创建调用者对象,具体的命令对象,在创建具体命令对象时指定接受者,发送者和接受者之间没有直接的关系,都是通过命令对象间接调用

 类图:

代码:

public interface Command {

    /**
     * 实际项目中,我们可以根据需求可以设计多个不同的方法
     */
    void execute();

}

public class ConcreteCommandImpl implements Command {

    private Receiver receiver;

    public ConcreteCommandImpl(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        System.out.println("具体调用.我先看看情况");
        receiver.action();
    }
}


/**
 * 真正命令的执行者
 */
public class Receiver {
    public void action(){
        System.out.println("Receiver.action(),,,,,,,,,");
    }
}


/**
 * 命令的调用者,和发起者
 */
public class Invoke {

    /**
     * 这里可以是一条,也可以是多条 可以是map 可以是list
     * 数据底层事物就是这样的
     */
    private Command command;

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

    /**
     * 调用者,可以做些业务的方法.
     */
    public void call(){
        command.execute();
    }
}


public class Main {

    public static void main(String[] args) {
        Command concreteCommand = new ConcreteCommandImpl(new Receiver());

        Invoke invoke = new Invoke(concreteCommand);
        invoke.call();
    }
}

总结:

这个模式在项目中很少使用,不过我们还是对它了解一下比较好,在数据的底层事物实现的时候,就是这样的模式

我对命令模式的理解,就是invoker和receiver 解耦, invoke也可以调用很多命令组成一个庞大的运行逻辑

感觉它和中介者模式有点类似,不过命令模式可以组成把很多命令组合起来使用.

原文地址:https://www.cnblogs.com/bj-xiaodao/p/10886550.html