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