通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。
认为是命令的地方都可以使用命令模式
将命令抽象为接口或抽象类
Girl
package com.dp.command;
public class Girl {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void order(Boy b) {
Command c = new ShoppingCommand();
b.addCommand(c);
b.executeCommands();
}
}
Boy
package com.dp.command;
import java.util.ArrayList;
import java.util.List;
public class Boy {
String name;
List<Command> commands = new ArrayList<Command>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void pursue(Girl girl) {
}
public void doSomething() {
}
public void addCommand(Command c) {
commands.add(c);
}
public void executeCommands() {
for(Command c:commands) {
c.execute();
}
}
public void unDoCommands() {
//用栈将执行的命令撤回
}
}
Command
package com.dp.command;
public abstract class Command {
public abstract void execute();
public abstract void unDo();
}
HugCommand
package com.dp.command;
public class HugCommand extends Command{
@Override
public void execute() {
System.out.println("Hug");
}
@Override
public void unDo() {
System.out.println("open arms");
}
}
ShoppingCommand
package com.dp.command;
public class ShoppingCommand extends Command{
@Override
public void execute() {
System.out.println("To supermaket");
}
@Override
public void unDo() {
System.out.println("From supermaket");
}
}