命令模式基本介绍
- 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但并不知道请求的接受者是谁,也不知道被请求的操作是具体如何执行
- 命令模式使得请求发送者和请求接受者之间松耦合。
- 命令模式支持撤销功能
如何解决
通过调用者发送指令,接受者接受指令并执行指令;
Http请求就是一种典型的命令模式
例子:
实现命令接口
public interface Command {
//执行命令
public void execute();
//撤销命令
public void undo();
}
开灯命令类
public class LightOnCommand implements Command {
// 聚合LightReceiver
List<LightReceiver> lights;
public LightOnCommand(List<LightReceiver> lights) {
this.lights = lights;
}
@Override
public void execute(int num) {
for (int i = 0; i < num; i++) {
lights.get[i].on();
}
}
@Override
public void undo() {
for (int i = 0; i < num; i++) {
lights.get[i].off();
}
}
}
定义接受者(电灯操作接受者)
public class LightReceiver {
public void on() {
System.out.println("电灯打开了...");
}
public void off() {
System.out.println("电灯关闭了...");
}
}
命令发布者类
public class RemoteController {
Command lightOnCommand;
// 构造函数中,给这个发布命令者赋权(拥有开关灯的权利)
public RemoteController(LightOnCommand command) {
lightOnCommand = command;
}
// 命令开几盏灯
public void lightOn(int num) {
lightOnCommand.execute(num);
}
}