19、命令模式(Command Pattern,不常用)

命令模式,将一个请求封装为一个对象(命令),使发出请求的责任和执行请求的责任分割开,有效降低系统的耦合度。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。命令模式包含以下主要角色:

  • 抽象命令类(Command):执行命令的接口,定义执行命令的抽象方法execute()。
  • 具体命令类(Concrete Command):抽象命令类的实现类,持有接收者对象,并在接收到命令后调用命令执行者的方法action()实现命令的调用和执行。
  • 命令执行者(Receiver):命令的具体执行者,定义了命令执行的具体方法action()。
  • 命令调用者(Invoker):接收客户端的命令并异步执行。

UML设计图如下:

1)Command 接口:

public interface Command {
    void exe(String command);
}

 2)命令的接收和执行者类Receiver:

@Slf4j
public class Receiver {
    public void action(String commandMsg) {
        log.info("received command and execute command ...");
    }
}

3)Command 接口的实现类 ConcreteCommand:

public class ConcreteCommand implements Command {
    private Receiver receiver;

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

    @Override
    public void exe(String command) {
        receiver.action(command);
    }
}

4)命令调用者类 Invoker:

@Slf4j
public class Invoker {
    private Command command;

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

    public void action(String commandMsg) {
        log.info("command sending ...");
        command.exe(commandMsg);
    }
}

5)测试命令模式:

public class CommandTest {

    public static void main(String[] args) {
        // 定义命令的接收者和执行者
        Receiver receiver = new Receiver();
        // 命令实现者
        ConcreteCommand command = new ConcreteCommand(receiver);
        // 定义命令调用者
        Invoker invoker = new Invoker(command);
        // 调用命令
        invoker.action("cmd");
    }
}

打印结果:

相关推荐

  1. 【Linux】命令记录

    2023-12-13 07:38:06       39 阅读
  2. ffmpeg命令整理

    2023-12-13 07:38:06       19 阅读
  3. openssl 命令 pkcs12

    2023-12-13 07:38:06       44 阅读
  4. Oracle 19C DBA管理命令

    2023-12-13 07:38:06       36 阅读
  5. 但是必会的Ubuntu 关机命令

    2023-12-13 07:38:06       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-13 07:38:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-13 07:38:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-13 07:38:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-13 07:38:06       20 阅读

热门阅读

  1. 第二百零三回 修改组件风格的另外一种方法

    2023-12-13 07:38:06       44 阅读
  2. EasyExcel

    2023-12-13 07:38:06       43 阅读
  3. msSQL和MySQL的区别?

    2023-12-13 07:38:06       51 阅读
  4. MySQL忘记root密码和修改root密码的解决方法

    2023-12-13 07:38:06       34 阅读
  5. 【解惑系列】如何提高一个接口的tps

    2023-12-13 07:38:06       37 阅读
  6. JVM类加载机制(中)

    2023-12-13 07:38:06       42 阅读
  7. React Context:跨层级组件共享状态参数、状态

    2023-12-13 07:38:06       36 阅读
  8. k8s 安装firewalld导致的网络疑难问题处理

    2023-12-13 07:38:06       36 阅读