1.意图
将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求
排队或者记录请求日志以及支持可撤销的操作
2.参与者
Command - 声明执行操作的接口
ConcreteCommand -将一个接收者对象绑定于一个对象
-调用接收者相应的操作以实现Execute
Client - 创建一个具体命令对象并设定它的接收者
Invoker - 要求该命令执行这个请求
Receiver - 知道如何实施与执行一个请求相关操作
3.结构
4.代码
public interface Command {
void execute();
}
public class NullCommand implements Command {
@Override
public void execute() {
}
}
public class ConcreteCommandA implements Command {
LightReceiver L;
ConcreteCommandA(LightReceiver L){
this.L = L;
}
@Override
public void execute() {
L.turnOff();
}
}
public class ConcreteCommandB implements Command {
LightReceiver L;
ConcreteCommandB(LightReceiver L){
this.L = L;
}
@Override
public void execute() {
L.turnOn();
}
}
public class LightReceiver {
public void turnOn(){
System.out.println("开灯");
}
public void turnOff(){
System.out.println("关灯");
}
}
public class Invoker {
Command command = new NullCommand();
public void setCommand(Command command) {
this.command = command;
}
public void action() {
command.execute();
}
public class Client {
public static void main(String[] args) {
LightReceiver lr = new LightReceiver();
ConcreteCommandA a = new ConcreteCommandA(lr);
ConcreteCommandB b = new ConcreteCommandB(lr);
Invoker invoker = new Invoker();
invoker.setCommand(a);
invoker.action();
invoker.setCommand(b);
invoker.action();
}
}