设计模式之-命令模式,快速掌握命令模式,通俗易懂的讲解命令模式以及它的使用场景

文章目录


一、快速理解命令模式

命令模式是一种行为型设计模式,它将请求封装成一个对象,从而使得可以用不同的请求对客户进行参数化,并且能够支持请求的排队执行、记录日志、撤销和重做等操作。

在现实生活中,命令模式的例子可以是遥控器。遥控器上的按钮(客户端)发送命令(请求)给电视(接收者),电视根据命令进行相应的操作。遥控器上的每个按钮都代表一个具体的命令,可以随时更换或增加按钮(命令)。

二、命令模式使用场景

使用命令模式的主要场景包括:

1.当需要将请求发送者和接收者解耦时,可以使用命令模式。命令对象封装了请求的细节,使得请求发送者和接收者之间没有直接的依赖关系。

  1. 当需要支持请求的排队执行、记录日志、撤销和重做等操作时,可以使用命令模式。通过将命令对象保存在队列中,可以实现对请求的排队执行和记录,同时可以通过撤销和重做命令对象来进行操作的撤销和重做。

代码示例

下面是一个通俗易懂的命令模式示例代码,以电视遥控器为场景:

cpp 复制代码
// 抽象命令:命令接口
interface Command {
    void execute();
}

// 具体命令:打开电视命令
class OpenTVCommand implements Command {
    private Television television;

    public OpenTVCommand(Television television) {
        this.television = television;
    }

    @Override
    public void execute() {
        television.open();
    }
}

// 具体命令:关闭电视命令
class CloseTVCommand implements Command {
    private Television television;

    public CloseTVCommand(Television television) {
        this.television = television;
    }

    @Override
    public void execute() {
        television.close();
    }
}

// 接收者:电视
class Television {
    public void open() {
        System.out.println("打开电视");
    }

    public void close() {
        System.out.println("关闭电视");
    }
}

// 请求者:遥控器
class RemoteController {
    private Command openCommand;
    private Command closeCommand;

    public void setOpenCommand(Command openCommand) {
        this.openCommand = openCommand;
    }

    public void setCloseCommand(Command closeCommand) {
        this.closeCommand = closeCommand;
    }

    public void openButtonPressed() {
        openCommand.execute();
    }

    public void closeButtonPressed() {
        closeCommand.execute();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Television television = new Television();

        Command openCommand = new OpenTVCommand(television);
        Command closeCommand = new CloseTVCommand(television);

        RemoteController remoteController = new RemoteController();
        remoteController.setOpenCommand(openCommand);
        remoteController.setCloseCommand(closeCommand);

        remoteController.openButtonPressed();
        remoteController.closeButtonPressed();
    }
}

在上面的示例中,Command是抽象命令接口,定义了命令的执行方法execute。OpenTVCommand和CloseTVCommand是具体命令类,分别实现了抽象命令接口,并在execute方法中调用接收者对象的相应方法。

Television是接收者类,定义了电视的打开和关闭方法。

RemoteController是请求者类,具有打开按钮和关闭按钮,通过设置具体命令对象来执行相应的命令。

在客户端代码中,首先创建了电视对象television。然后创建了打开电视命令对象openCommand和关闭电视命令对象closeCommand,并设置给遥控器对象remoteController。最后,通过调用遥控器对象的打开按钮和关闭按钮方法,分别执行相应的命令。

通过使用命令模式,可以将请求发送者和接收者解耦,使得它们之间的依赖关系更加松散。命令模式还支持请求的排队执行、记录日志、撤销和重做等操作,提供了更多的灵活性和可扩展性。

相关推荐
星星点点洲3 小时前
【设计模式区别】装饰器模式和适配器模式区别
设计模式·适配器模式·装饰器模式
Tang10244 小时前
分析 Android Jetpack Lifecycle 的设计思想及其与生命周期感知组件的交互原理
设计模式
?abc!4 小时前
设计模式基础概念(结构型模式):适配器模式(Adapter Pattern)
python·设计模式·适配器模式
ApeAssistant5 小时前
Spring + 设计模式 (十八) 行为型 - 责任链模式
spring·设计模式
前端大白话6 小时前
震惊!90%前端工程师都踩过的坑!Vue中`$el`和`$refs`获取DOM元素的10大区别与实战指南
前端·vue.js·设计模式
前端大白话6 小时前
惊!10行代码实现fetch并发请求!前端工程师必看的错误处理神操作
前端·javascript·设计模式
ApeAssistant6 小时前
Spring + 设计模式 (十六) 行为型 - 状态模式
spring·设计模式
ApeAssistant6 小时前
Spring + 设计模式 (十五) 行为型 - 模板方法模式
spring·设计模式
lybugproducer10 小时前
创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式
java·设计模式·建造者模式·简单工厂模式·工厂方法模式·抽象工厂模式·面向对象
cooldream20091 天前
深入理解MVP架构:让UI层与业务逻辑完美分离的设计模式
ui·设计模式·架构·系统架构师