23种设计模式之命令模式

命令模式

1、定义

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

2、命令模式结构

  • Command(抽象命令类):一般是一个抽象类或接口,在其中声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接收者的相关操作
  • ConcreteCommand(具体命令类):是抽象命令类的子类,实现了抽象类中声明的方法,它对应具体的接收者对象,将接收者对象的动作绑定其中,在实现execute()时将调用接收者对象的相关操作
  • Invoker(调用者):请求发送者,通过命令对象来执行请求
  • Receiver(接收者):执行与请求相关的操作,具体实现对请求的业务处理

3、示例代码

Command

java 复制代码
public abstract class Command {

    protected Receiver receiver;

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

    public abstract void execute();
}

ConcreteCommand

java 复制代码
public class ConcreteCommand extends Command {

    public ConcreteCommand(Receiver receiver) {
        super(receiver);
    }

    @Override
    public void execute() {
        receiver.receive();
    }
}

Invoker

java 复制代码
public class Invoker {

    private Command command;

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

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

Receiver

java 复制代码
public class Receiver {

    public void receive() {
        System.out.println("This is Receive class!");
    }
}

Test

java 复制代码
public class Client {
    public static void main(String[] args) {
        Receiver rec = new Receiver();
        Command cmd = new ConcreteCommand(rec);
        Invoker i = new Invoker();
        i.setCommand(cmd);
        i.execute();
    }
}

输出

This is Receive class!

4、命令模式的优缺点

优点:

  • 降低系统耦合度
  • 新的命令可以很容易加入到系统中
  • 可以比较容易的设计一个命令队列或组合命令
  • 为请求的撤销和恢复操作提供了一种设计和实现方案

缺点:

  • 可能会导致系统有过多的具体命令类。

5、命令模式适用环境

  • 抽象出待执行的动作以参数化某个对象
  • 在不同的时刻指定排列和执行请求
  • 支持取消操作
  • 支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍
  • 用构建在原语操作上的高层抽象操作构造一个系统
相关推荐
回忆2012初秋9 小时前
工厂方法模式完整实现:GPS转换
设计模式·工厂方法模式
其实防守也摸鱼10 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
胡志辉的博客12 小时前
多智能体协作,不是多开几个 Agent:从中介者模式看 OpenClaw 和 Hermes Agent
人工智能·设计模式·ai·agent·中介者模式·openclaw·herman
shark222222212 小时前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
014-code14 小时前
日志规范:怎么写才不算写废话
java·开发语言·设计模式·日志
楼田莉子14 小时前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
kyriewen1121 小时前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式·typescript·ecmascript·html5
kyriewen1 天前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式
两年半的个人练习生^_^1 天前
每日一学:设计模式之原型模式
java·开发语言·设计模式·原型模式
断眉的派大星2 天前
工厂模式(Factory Pattern)完整详解
python·设计模式