Modo de comando del modo de diseño 9

En el desarrollo, a menudo existe una estrecha relación entre la solicitud de método y la ejecución del método, lo que no favorece el mantenimiento del sistema. El modo de comando pareció resolver este problema.

Que es el modo de comando

"

El modo de comando es un modo altamente cohesivo, que se define como: Encapsular una solicitud como un objeto, permitiéndole parametrizar clientes con diferentes solicitudes, solicitudes de cola o registro, y admitir operaciones que se pueden deshacer. (Encapsular una solicitud como un objeto, por lo tanto Le permite usar diferentes solicitudes para parametrizar el cliente, poner en cola solicitudes o registrar registros de solicitudes, y proporcionar funciones de cancelación y recuperación de comandos).

"

El siguiente es un diagrama de clases general del modo de comando:

Modo de comando

El modo de comando se compone principalmente de 3 elementos:

"
  • Recibir destinatario: comando Recibir

  • Rol de comando: encapsular el comando a ejecutar

  • Llamador de invocador: ejecutar comando

"

Código

Primero crea un receptor abstractoReceiver

public abstract class Receiver {
    //抽象接收者,定义每个接收者都必须完成的业务
    public abstract void doSomething();
}

Cree otra Receiverclase de implementación ConcreteReceiver1. Puede haber varias clases de implementación, como crearlas ConcreteReceiver2.

public class ConcreteReceiver1 extends Receiver {
    @Override
    public void doSomething() {
        Console.log("执行ConcreteReceiver1的方法...");
    }
}

public class ConcreteReceiver2 extends Receiver {
    @Override
    public void doSomething() {
        Console.log("执行ConcreteReceiver2的方法...");
    }
}

Luego crea la abstracción del comandoCommand

public abstract class Command {
    //每个命令类都必须有一个执行命令的方法
    public abstract void execute();
}

Del mismo modo Receiver, Commandpuede haber muchas clases de implementación.

public class ConcreteCommand1 extends Command {
    //对哪个Receiver类进行命令处理
    private Receiver receiver;

    //构造函数传递接收者
    public ConcreteCommand1(Receiver _receiver) {
        this.receiver = _receiver;
    }

    //必须实现一个命令
    @Override
    public void execute() {
        //业务处理
        this.receiver.doSomething();
    }
}
public class ConcreteCommand2 extends Command {
    //对哪个Receiver类进行命令处理
    private Receiver receiver;

    //构造函数传递接收者
    public ConcreteCommand2(Receiver _receiver) {
        this.receiver = _receiver;
    }

    //必须实现一个命令
    @Override
    public void execute() {
        //业务处理
        this.receiver.doSomething();
    }
}

Crear llamadorInvoker

public class Invoker {
    private Command command;

    //接受命令
    public void setCommand(Command _command) {
        this.command = _command;
    }

    //执行命令
    public void action() {
        this.command.execute();
    }
}

prueba:

@Test
public void test() {
    //首先声明调用者Invoker
    Invoker invoker = new Invoker();
    //定义接收者
    Receiver receiver = new ConcreteReceiver1();
    //定义一个发送给接收者的命令
    Command command = new ConcreteCommand1(receiver);
    //把命令交给调用者去执行
    invoker.setCommand(command);
    invoker.action();
}

Resultados de la prueba:

执行ConcreteReceiver1的方法...

ReceiverEl método aquí es el método que necesitamos usar, este método es Commandencapsulado por adquisición y Invokerejecutado.

Pensando en el modo de comando

La persona que llama no llama directamente los métodos del receptor, pero para llamar Commanden execute(). Para la persona que llama, no es necesario que sepa quién es el receptor.

En términos generales, el modo de comando combinado con otros modos de diseño tendrá mejores resultados.

Pero en el modo de comando, el comando no se puede expandir infinitamente, si hay N comandos, habrá N subclases de comandos, lo cual no es muy bueno.

Recomendado en el pasado

Escanee el código QR para ser más emocionante. O busque Lvshen_9 en WeChat , puede responder para obtener información en segundo plano

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Otro: haga clic en [ Mis beneficios ] para tener más sorpresas.

Supongo que te gusta

Origin blog.csdn.net/wujialv/article/details/109153859
Recomendado
Clasificación