当前位置:实例文章 » 其他实例» [文章]Java设计模式之行为型-命令模式(UML类图+案例分析)

Java设计模式之行为型-命令模式(UML类图+案例分析)

发布人:shili8 发布时间:2024-11-16 19:25 阅读次数:0

**Java 设计模式之行为型 - 命令模式**

**概述**

命令模式是一种行为型设计模式,它允许你将请求或操作封装在一个对象中,从而使得请求的发送者和接收者解耦。这种模式通过定义一个抽象的命令接口来实现这一点。

**UML 类图**

下面是命令模式的 UML 类图:

markdown+---------------+
| Command |
+---------------+
 |
 |
 v+---------------+
| ConcreteCommand|
+---------------+
 |
 |
 v+---------------+
| Receiver |
+---------------+


* `Command` 是一个抽象的命令接口,它定义了执行命令所需的方法。
* `ConcreteCommand` 是具体的命令类,实现了 `Command` 接口。它负责封装具体的请求或操作。
* `Receiver` 是被命令调用的对象,它负责执行具体的请求或操作。

**案例分析**

假设我们有一个电梯系统,我们需要将电梯的上下行操作封装在一个命令中,以便于控制和管理。我们可以使用命令模式来实现这一点。

### 命令接口首先,我们定义一个抽象的命令接口 `Command`:

javapublic interface Command {
 void execute();
}


### 具体命令类然后,我们创建具体的命令类 `UpCommand` 和 `DownCommand`,它们实现了 `Command` 接口:

javapublic class UpCommand implements Command {
 private Elevator elevator;

 public UpCommand(Elevator elevator) {
 this.elevator = elevator;
 }

 @Override public void execute() {
 elevator.up();
 }
}

public class DownCommand implements Command {
 private Elevator elevator;

 public DownCommand(Elevator elevator) {
 this.elevator = elevator;
 }

 @Override public void execute() {
 elevator.down();
 }
}


### 接收者类接下来,我们定义被命令调用的对象 `Elevator`:

javapublic class Elevator {
 private int floor;

 public void up() {
 floor++;
 System.out.println("电梯上行到第" + floor + "层");
 }

 public void down() {
 floor--;
 System.out.println("电梯下行到第" + floor + "层");
 }
}


### 客户端类最后,我们创建客户端类 `Controller`,它负责创建命令对象并执行它们:

javapublic class Controller {
 private Command command;

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

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


### 使用示例现在,我们可以使用这些类来演示命令模式的使用:

javapublic class Main {
 public static void main(String[] args) {
 Elevator elevator = new Elevator();
 Controller controller = new Controller();

 UpCommand upCommand = new UpCommand(elevator);
 DownCommand downCommand = new DownCommand(elevator);

 controller.setCommand(upCommand);
 controller.execute(); // 电梯上行到第1层 controller.setCommand(downCommand);
 controller.execute(); // 电梯下行到第0层 }
}


在这个示例中,我们首先创建一个 `Elevator` 对象,然后创建两个命令对象 `UpCommand` 和 `DownCommand`。接着,我们将这些命令对象设置到 `Controller` 中,并执行它们。

通过使用命令模式,我们可以将请求或操作封装在一个对象中,从而使得请求的发送者和接收者解耦。这有助于我们更好地管理复杂的系统,并提高代码的可维护性和扩展性。

相关标签:命令模式
其他信息

其他资源

Top