命令模式Command
经一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持课撤销的操作
Command:定义命令接口,声明执行的方法
ConcreteCommand:实现类,实现方法,持有Receiver引用
Invoker:调用者持有Command,可能多个,调用命令
Receiver:接收者,命令的实际执行者(可是抽象的)
对命令进行封装,使得命令请求本身成为了一个对象
使用场景
降低耦合,调用者与执行者分离,互相不知道是谁,可以组合多个命令,形成一个宏命令,支持撤销和恢复的操作
缺点:可能会生成过多的具体命令类
代码实现
Invoker 实际调用者
持有Command引用,可持有多个
public class Invoker {
private Command command;
public Invoker(Command command){
this.command = command;
}
public void ExecuteCommand(){
command.Execute();
}
}
ConcreteCommand:
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
@Override
public void Execute() {
receiver.Action();
}
}
Receiver:实际命令的执行者
public class Receiver {
public void Action(){
System.out.println("接收者执行命令");
}
}
与策略模式
策略模式虽有多个策略,但是都是是针对同一个问题的
命令模式却是针对多个命令的