书城计算机网络大话设计模式
8183300000190

第190章 11 命令模式与其它模式的配合使用

小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、需求:命令很多类似的地方

解决:使用原型模式,利用。