在许多设计中,经常涉及到一个对象请求另一个对象调用其方法到达某种目的。如果请求者不希望或无法直接和被请求者打交道,即不希望或无法含有被请求者的引用,那么就可以使用命令模式。比如军队中军官让连长“偷袭敌人”的作战命令。给出参考Java代码
时间: 2024-10-10 07:09:50 浏览: 22
命令模式是一种行为设计模式,它封装了请求(请求、操作)以及如何执行这个请求。它将一个请求封装为一个独立的对象,从而使你能够有改变请求、排队请求、记录请求历史等灵活性。在Java中,可以这样实现:
```java
// 定义命令接口
interface Command {
void execute();
}
// 具体命令,例如偷袭敌人的命令
class AttackCommand implements Command {
private String target;
public AttackCommand(String target) {
this.target = target;
}
@Override
public void execute() {
System.out.println("连长接到命令,偷袭" + target);
}
}
// 软件上下文,负责处理命令
class Commander {
// 添加命令到上下文中
public void addCommand(Command command) {
// 假设此处添加到了一个列表或者队列中
commands.add(command);
}
// 当需要执行命令时,通过ID获取并执行
public void executeCommand(int id) {
if (commands.size() > id) {
commands.get(id).execute();
} else {
throw new IndexOutOfBoundsException();
}
}
private List<Command> commands = new ArrayList<>();
}
public class Main {
public static void main(String[] args) {
Commander commander = new Commander();
AttackCommand attack = new AttackCommand("敌人");
commander.addCommand(attack); // 将命令加入到指挥官的命令集合
// 指挥官按顺序执行命令
commander.executeCommand(0); // 输出结果
}
}
```
在这个例子中,`AttackCommand`类就是具体的命令,`Commander`类是接收命令和执行命令的地方。这种方式使得请求者(`Commander`)和命令执行者(`AttackCommand`)解耦,增强了代码的可维护性和灵活性。
阅读全文