struct1和struct2都实现了command模式
1、当一个请求来了之后,会把请求交给一个业务去处理,是通过命令来处理这个请求。
2、当做了一件事情后悔了,想要undo,command模式也可以实现撤销
Command接口
package command;
public abstract class Command {
public abstract void execute();//执行
public abstract void unDo();//撤销
}
ShoppingCommand
public class ShoppingCommand extends Command{
@Override
public void execute() {
System.out.println("去逛街");
}
@Override
public void unDo() {
System.out.println("不去逛街了");
}
}
hugCommand
public class hugCommand extends Command {
@Override
public void execute() {
System.out.println("张开双臂");
}
@Override
public void unDo() {
System.out.println("关闭双臂");
}
}
Boy
public class Boy {
private String name;
//直接把Command作为成员变量放在Boy变量里
private List<Command> commands =new ArrayList<Command>();//
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void doSomeThing(){
}
public void addCommand(Command c){
this.commands.add(c);
}
//全部依次执行
public void executeCommands() {
for(Command c:commands){
c.execute();
}
}
//撤销,怎么样来unDo?这就需要做一个历史记录
//专门用一个list,里面装着已经执行了的Command,具体用栈实现
public void undoCommands(){
}
}
执行Command
public class MM {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void order(Boy b){
Command c1=new ShoppingCommand();
b.addCommand(c1);
Command c2=new ShoppingCommand();
b.addCommand(c2);
b.executeCommands();// 执行所有Command
}
}