命令模式
基础概念
什么是命令模式?
答案: 命令模式(Command Pattern)将请求封装成对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
使用场景:
- 需要将请求调用者和请求接收者解耦
- 需要支持撤销操作
- 需要支持事务
优点:
- 降低耦合度
- 易于扩展新命令
- 支持撤销和恢复
缺点:
- 可能产生大量命令类
实现方式
java
// 命令接口
public interface Command {
void execute();
void undo();
}
// 接收者
public class Light {
public void on() {
System.out.println("灯打开");
}
public void off() {
System.out.println("灯关闭");
}
}
// 具体命令
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
@Override
public void undo() {
light.off();
}
}
// 调用者
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
public void pressUndo() {
command.undo();
}
}
// 使用
Light light = new Light();
Command command = new LightOnCommand(light);
RemoteControl remote = new RemoteControl();
remote.setCommand(command);
remote.pressButton(); // 灯打开
remote.pressUndo(); // 灯关闭练习题
- 命令模式和策略模式的区别?
- 如何实现宏命令?
- 命令模式的应用场景?