首页 > 其他分享 >【设计模式系列】命令模式

【设计模式系列】命令模式

时间:2024-10-20 10:46:21浏览次数:18  
标签:execute Runnable 系列 对象 模式 命令 Command 设计模式

目录

一、什么是命令模式

二、命令模式的角色

三、命令模式的典型应用场景

四、命令模式在Runnable中的应用


一、什么是命令模式

命令模式(Command Pattern)是一种行为设计模式,它将一个请求或简单操作封装为一个对象。这个模式提供了一种机制,使得你可以将操作的发出者(发起请求的对象)和操作的执行者(接收请求的对象)解耦同时允许你根据不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

二、命令模式的角色

命令模式包含以下几个关键角色:

  1. Command(命令接口)

    • 定义命令的接口,通常至少包含一个 execute() 方法,用于执行命令。
  2. ConcreteCommand(具体命令类)

    • 实现命令接口,对应于具体的行为和接收者的绑定。它内部持有接收者(Receiver)的引用,并在 execute() 方法中调用接收者的方法。
  3. Invoker(调用者)

    • 要求命令对象执行请求。调用者持有命令对象,并在某个时刻调用命令对象的 execute() 方法。
  4. Receiver(接收者)

    • 知道如何实施与执行一个请求相关的操作。它执行与命令相关的实际工作。

三、命令模式的典型应用场景

  1. 解耦操作调用者和执行者: 在系统需要高度解耦的场景中,命令模式可以将发起操作的对象(调用者)和执行操作的对象(接收者)分开,增加系统的灵活性。

  2. 分布式系统: 在分布式系统中,命令模式可以用来封装远程调用,使得远程调用像本地调用一样简单。

四、命令模式在Runnable中的应用

Runnable 接口在 Java 中是一个函数式接口,它只有一个方法 run()。虽然 Runnable 本身并不是一个命令模式的实现,但它经常被用来模拟命令模式的行为。在命令模式中,Runnable 可以作为一个命令对象,封装了要执行的操作。

以下是 Runnable 在命令模式中的一个应用示例:

  1. 命令接口(Command): 在 Java 中,这通常是一个包含 execute() 方法的接口。

  2. 具体命令类(ConcreteCommand): 实现命令接口的类,它的 execute() 方法会调用 Runnablerun() 方法。

  3. 调用者(Invoker): 一个对象,它持有命令对象,并在需要时调用命令对象的 execute() 方法。

Runnable 在命令模式使用示例:

// 命令接口
interface Command {
    void execute();
}

// 具体命令类
class ConcreteCommand implements Command {
    private Runnable runnable;

    public ConcreteCommand(Runnable runnable) {
        this.runnable = runnable;
    }

    @Override
    public void execute() {
        runnable.run();
    }
}

// 调用者
class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void executeCommand() {
        command.execute();
    }
}

// Runnable 实现
class Task implements Runnable {
    @Override
    public void run() {
        System.out.println("Task is running");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Task task = new Task();
        Command command = new ConcreteCommand(task);
        Invoker invoker = new Invoker();

        invoker.setCommand(command);
        invoker.executeCommand(); // 输出:Task is running
    }
}

在这个例子中,Task 是一个实现了 Runnable 接口的类,它封装了一个任务。ConcreteCommand 是一个具体命令类,它持有一个 Runnable 对象,并在 execute() 方法中调用 Runnablerun() 方法。Invoker 是调用者,它持有命令对象,并在适当的时候执行命令。这样,Runnable 就充当了命令模式中的命令对象,封装了要执行的操作。

标签:execute,Runnable,系列,对象,模式,命令,Command,设计模式
From: https://blog.csdn.net/LHW0621/article/details/143084608

相关文章

  • Java设计模式——适配器模式
    适配器模式(AdapterPattern)是一种结构型设计模式,它用于将一个类的接口转换成客户端希望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以协同工作。适配器模式的主要目的是兼容性和重用性,特别是在使用一些已有的类,而它们的接口又不符合要求时。适配器模式的核心思想......
  • [蓝桥杯算法从小白到大牛]双指针系列(一)
            那么接下来的贴子就是开始讲解算法了,在这个系列里的每个类型的算法题至少会讲解3道,每一步搞了什么会讲解的特备详细,希望对小伙伴们有所帮助,我写的如果有哪里不对的地方请指出来哦!让我们一起进步吖鸡汤        算法题听起来是真的高大上,但是只......
  • java_day19_线程组、线程池、定时器、InetAddress、网络编程、设计模式
    一、线程组:线程组:将属于同一类的线程划分到同一组中,可以直接对线程组进行设置。ThreadGroup构造方法:ThreadGroup(Stringname)构造一个新的线程组。代码案例:classMyThread1extendsThread{publicMyThread1(){}publicMyThread1(ThreadGr......