Java命令模式

Java命令模式

1.概述

命令模式是一种行为型设计模式,它将请求封装为一个对象,从而使用户能够用不同的请求参数来进行参数化和传递方法调用。命令模式允许将操作请求的发送者和接收者解耦,即请求发起者并不需要知道请求的具体执行过程是如何完成的,只需要知道接收者可以执行该命令。

2.模式结构

  • 命令(Command):抽象命令类,定义了命令的接口。
  • 具体命令(ConcreteCommand):实现了命令接口,定义了具体命令的执行逻辑。
  • 命令接收者(Receiver):接收者执行命令的逻辑实现。
  • 命令调用者(Invoker):负责调用命令并执行相应的逻辑。
  • 客户端(Client):创建具体的命令,调用者调用命令并执行。

3.代码示例

3.1 命令接口(Command)

public interface Command {
    void execute();
}

3.2 具体命令(ConcreteCommand)

public class LightOnCommand implements Command {
    private LightRecevier light;

    public LightOnCommand(LightRecevier light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }
}

public class LightOffCommand implements Command {
    private LightRecevier light;

    public LightOffCommand(LightRecevier light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.off();
    }
}

3.3 命令接收者(Receiver)

public class LightRecevier {
    public void on() {
        System.out.println("灯打开了");
    }

    public void off() {
        System.out.println("灯关闭了");
    }
}

3.4 命令调用者(Invoker)

public class SimpleInvoker {
    private Command command;

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

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

3.5 客户端(Client)

public class Client {
    public static void main(String[] args) {
        // 创建接收者对象
        LightRecevier light = new LightRecevier();

        // 创建具体命令对象
        LightOnCommand lightOnCommand = new LightOnCommand(light);
        LightOffCommand lightOffCommand = new LightOffCommand(light);

        // 创建调用者对象
        SimpleInvoker invoker = new SimpleInvoker();

        // 设置具体命令对象
        invoker.setCommand(lightOnCommand);
        invoker.executeCommand();

        invoker.setCommand(lightOffCommand);
        invoker.executeCommand();
    }
}

4.优缺点说明

4.1 优点

  • 支持撤销和重做操作。
  • 容易扩展新的命令或者一组命令。
  • 很容易将单个命令放在队列中启用。
  • 使用命令模式可以使客户端代码与具体执行操作的类解耦。

4.2 缺点

  • 会导致某些系统有过多的具体命令类。
  • 可能这样做会增加系统的复杂性,因为需要新的代码来管理命令关系。

5.适用场景

  • 当需要将发出请求的对象与执行请求的对象解耦时。
  • 当需要在不同的时间指定、排列和执行请求时。
  • 当需要支持撤销、重做和恢复操作时。
  • 当需要将一组操作组合在一起,形成一个类似于面板的操作时。
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值