设计模式-命令模式

目录

1、命令模式的概念

1.1 、什么是命令模式?

1.2 、命令模式的优势

1.3、应用场景

1.4、UML图

2、命令模式的结构

2.1、 命令接口(Command)

2.2 、具体命令类(ConcreteCommand)

2.3、调用者(Invoker)

2.4 、接收者(Receiver)

3、命令模式的应用场景

3.1 、遥控器例子

3.2 、事务处理

4.代码示例

4.1 、命令接口和具体命令类

4.2 、调用者和接收者

4.3 、客户端使用

5、命令模式的最佳实践

5.1 、松耦合

5.2 、可扩展性

6、总结


1、命令模式的概念

1.1 、什么是命令模式?

命令模式是一种行为型设计模式,它允许您将请求封装为一个对象,从而可以在不同的上下文中使用和参数化请求。这使得您能够延迟请求的执行、取消请求或将请求排入队列。

1.2 、命令模式的优势

  • 解耦:命令模式将调用者与接收者解耦,使得两者可以独立变化。
  • 可扩展性:您可以轻松地添加新的命令类,而无需更改现有的代码。
  • 撤销和重做:命令模式支持撤销和重做操作。

1.3、应用场景

现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了。电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者)。再比如,我们去餐厅吃饭,菜单不是等到客人来了之后才定制的,而是已经预先配置好的。这样,客人来了就只需要点菜,而不是任由客人临时定制。餐厅提供的菜单就相当于把请求和处理进行了解耦,这就是命令模式的体现。

1.4、UML图

设计模式-命令模式_第1张图片

2、命令模式的结构

2.1、 命令接口(Command)

命令接口定义了执行命令的方法。它可以包含execute()方法,用于执行相应的操作。

2.2 、具体命令类(ConcreteCommand)

具体命令类实现了命令接口,它将一个接收者对象绑定到一个动作,并在调用时调用接收者的操作。

2.3、调用者(Invoker)

调用者类包含一个命令对象,并在某个时刻调用命令的execute()方法。

2.4 、接收者(Receiver)

接收者类执行命令的实际操作。命令类通过调用接收者类的方法来完成请求。

3、命令模式的应用场景

3.1 、遥控器例子

想象一个遥控器,每个按钮都代表一个命令。遥控器不需要知道具体的设备,只需要知道命令,从而实现设备的解耦。

3.2 、事务处理

命令模式可以用于实现事务处理,将一系列操作封装成一个命令对象,以便支持事务的提交或回滚。

4.代码示例

4.1 、命令接口和具体命令类

// 命令接口
interface Command {
    void execute();
}

// 具体命令类
class LightOnCommand implements Command {
    private Light light;

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

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

4.2 、调用者和接收者

// 调用者
class RemoteControl {
    private Command command;

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

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

// 接收者
class Light {
    void turnOn() {
        System.out.println("Light is on");
    }
}

4.3 、客户端使用

public class CommandPatternExample {
    public static void main(String[] args) {
        Light light = new Light();
        LightOnCommand lightOnCommand = new LightOnCommand(light);
        
        RemoteControl remote = new RemoteControl();
        remote.setCommand(lightOnCommand);
        
        remote.pressButton();  // 执行命令
    }
}

5、命令模式的最佳实践

5.1 、松耦合

命令模式帮助实现松耦合,使得调用者和接收者能够独立变化,从而更容易维护和扩展。

5.2 、可扩展性

通过添加新的命令类,您可以轻松地扩展系统的功能,而无需更改现有代码。

6、总结

命令模式是一种强大的设计模式,能够将请求封装成对象,提高系统的灵活性和可扩展性。通过理解其概念、结构和实际应用,您可以更好地将命令模式应用于您的项目中,从而提高代码的可维护性和可读性。

你可能感兴趣的:(设计模式,1024程序员节,设计模式,命令模式)