小A:“命令模式怎样与其它模式的配合使用?”
大B:“1、看上边的Invoker的实现是否很像代理模式呢,Invoker的这种实现其实就是一种代理模式。2、需求:有个固定命令组合会多次被执行。解决:加入合成模式,实现方法如下,定义一个宏命令类。”
public class MacroCommand implements Command{
private List cmdList=new ArrayList();
public add(Command command){
cmdList。add(command);
}
public remove(Command command){
cmdList。remove(command);
}
public void execute(){
Command cmd;
for(int i=0;i<cmdList。size();i ){
cmd=(Command)cmdList。get(i);
cmd。exec
ute();
}
}
}
3、需求:须要redo undo解决:加入备忘录模式,一个简单的实现如下
public class ConcreteCommandOne implements Command{
private Receiver receiver
private Receiver lastReceiver;
public ConcreteCommandOne(Receiver receiver){
this。receiver=receiver;
}
public void execute(){
record();
receiver。actionOne();
}
public void undo(){
//恢复状态
}
public void redo(){
lastReceiver。actionOne();
//
}
public record(){
//记录状态
}
}
4、需求:命令很多类似的地方
解决:使用原型模式,利用。