java设计模式(十五)命令模式(Command Pattern)

1、模式介绍:

命令模式(Command Pattern)是一种行为设计模式,其主要目的是将请求封装成一个对象,从而允许使用不同的请求、队列或者日志来参数化其他对象。这种模式使得命令的请求者和实现者解耦。

2、应用场景:

需要将请求发送者和接收者解耦:命令模式将请求封装成对象,使得发送者和接收者彼此独立,发送者不需要知道接收者的具体操作。
需要在不同的时间指定请求、排队请求、记录请求:命令模式允许将操作请求封装成对象,从而使得可以参数化其他对象来执行不同的请求、将请求排队、记录日志等。

3、优点:

降低系统耦合度:命令模式将请求者与接收者解耦,请求者无需知道接收者的详细信息。
新增或修改命令更加灵活:可以新增命令类或修改命令参数,而不影响到其他类。
支持撤销和重做操作:通过保存历史命令可以实现撤销和重做操作。

4、缺点:

命令类可能会增加系统复杂度:每一个命令都需要设计一个具体命令类,可能会导致类的数量增加。
可能会导致系统产生大量的具体命令类:如果命令操作很多,可能会产生大量的具体命令类。

5、代码示例:

/**
 * 命令接口
 *
 * @author FM_南风
 * @date 2024/7/5
 */
public interface Command {
    void execute();
}

/**
 * 接收者类 - 灯
 *
 * @author FM_南风
 * @date 2024/7/5
 */
public class Light {
    public void turnOn() {
        System.out.println("灯已打开");
    }

    public void turnOff() {
        System.out.println("灯已关闭");
    }
}

/**
 * 具体命令类 - 关灯命令
 *
 * @author FM_南风
 * @date 2024/7/5
 */
public class LightOffCommand implements Command {
    private Light light;

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

    public void execute() {
        light.turnOff();
    }
}

/**
 * 具体命令类 - 开灯命令
 *
 * @author FM_南风
 * @date 2024/7/5
 */
public class LightOnCommand implements Command{
    private Light light;

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

    public void execute() {
        light.turnOn();
    }
}

/**
 * 调用者类 - 遥控器
 *
 * @author FM_南风
 * @date 2024/7/5
 */
public class RemoteControl {
    private Command command;

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

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

/**
 * 应用
 *
 * @author FM_南风
 * @date 2024/7/5
 */
public class CommandClient {
    public static void main(String[] args) {
        // 创建灯对象
        Light light = new Light();

        // 创建具体命令对象
        Command turnOnCommand = new LightOnCommand(light);
        Command turnOffCommand = new LightOffCommand(light);

        // 创建遥控器对象
        RemoteControl remoteControl = new RemoteControl();

        // 设置命令并执行
        remoteControl.setCommand(turnOnCommand);
        remoteControl.pressButton(); // 打开灯

        remoteControl.setCommand(turnOffCommand);
        remoteControl.pressButton(); // 关闭灯
    }
}

6、结果展示:

7、示例说明:

在这个示例中:
Command 是命令接口,定义了执行命令的方法 execute
LightOnCommand 和 LightOffCommand 是具体的命令类,分别用于开灯和关灯操作。
Light 是接收者类,定义了实际的操作方法。
RemoteControl 是调用者类,通过 setCommand 方法设置命令,通过 pressButton 方法执行命令。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值