Java后端需要掌握哪些技术(23种设计模式之命令模式)

Java后端需要掌握哪些技术(23种设计模式之命令模式)
23种设计模式之命令模式

一、什么是命令模式?

命令模式是一种行为型设计模式,它将请求封装成对象,从而允许你参数化不同请求、排队或记录请求日志,以及支持可撤销的操作。

通俗理解:想象你在餐厅点餐:服务员(调用者)把你的点单(命令)交给厨师(接收者),厨师根据点单做饭。服务员不需要知道怎么做饭,只需要传递命令。这就是命令模式的核心思想——把"操作"封装成"命令"对象。

二、生活中的例子

  • 餐厅点餐:服务员把点单传递给厨师
  • 电视遥控:遥控器发出命令,电视执行
  • 撤销功能:编辑器中的Ctrl+Z撤销操作

三、代码示例

1. 命令接口和接收者

// 命令接口public interface Command {    void execute();    void undo();  // 撤销}// 接收者:灯public class Light {    public void on() { System.out.println("灯亮了"); }    public void off() { System.out.println("灯关了"); }}

2. 具体命令

// 开灯命令public class LightOnCommand implements Command {    private Light light;        public LightOnCommand(Light light) {        this.light = light;    }        @Override    public void execute() {        light.on();    }        @Override    public void undo() {        light.off();    }}// 关灯命令public class LightOffCommand implements Command {    private Light light;        public LightOffCommand(Light light) {        this.light = light;    }        @Override    public void execute() {        light.off();    }        @Override    public void undo() {        light.on();    }}

3. 调用者(遥控器)

// 遥控器(调用者)public class RemoteControl {    private Command command;    private Command undoCommand;  // 上一次执行的命令        public void setCommand(Command command) {        this.command = command;    }        public void pressButton() {        command.execute();        undoCommand = command;  // 保存以便撤销    }        public void pressUndo() {        if (undoCommand != null) {            undoCommand.undo();        }    }}

4. 客户端使用

public class Client {    public static void main(String[] args) {        // 创建接收者和命令        Light light = new Light();        Command lightOn = new LightOnCommand(light);        Command lightOff = new LightOffCommand(light);                // 创建遥控器        RemoteControl remote = new RemoteControl();                // 开灯        remote.setCommand(lightOn);        remote.pressButton();        // 输出:灯亮了                // 撤销        remote.pressUndo();        // 输出:灯关了    }}

四、优缺点分析

优点

缺点

解耦调用者和接收者

类数量增加

支持撤销和重做

撤销逻辑复杂

可以组合命令(宏命令)


符合开闭原则


Java后端需要掌握哪些技术(23种设计模式之命令模式)

五、使用场景

  • 当需要撤销操作时(如编辑器)
  • 当需要记录操作日志时
  • 当需要参数化操作时

六、总结

命令模式把请求封装成对象,从而实现了请求的排队、记录日志、撤销等功能。在实际开发中,事务管理、宏命令、任务队列等都用到命令模式。掌握这个模式,可以让操作更加灵活和可控。

#设计模式##Java面试题##Java后端需要学习哪些技术#

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读