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

