设计模式——命令模式
作者:互联网
命令模式基本介绍
- 命令模式(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);
}
}
这样通过命令类,实现了 命令发布者 与 执行者的 解耦;
命令发布者只管发命令(比如当前开几盏灯),具体执行是谁不关心,只要执行正确就行
类似将军发布命令,让100个小兵上前线,但不关心这一百个小兵具体是谁,只要有100个小兵执行就可以了
标签:lights,void,模式,命令,num,接受者,设计模式,public 来源: https://www.cnblogs.com/gradyblog/p/15358351.html