设计模式的区分往往是在语义方面的区分
背景:男孩要追妹妹
妹妹命令男孩去做一些事情,,并希望做的事情将来能够扩展,,方法是建立一个Command抽象类或接口
Command模式:
可实现unDo功能,,方法就是建立一个历史记录
=========================================================
MM类
package com.linux_lihuafeng.command;
public class MM {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// MM命令Boy去做一些事
public void order(Boy b) {
Command c1 = new ShoppingCommand();
b.addCommand(c1);
Command c2 = new HugCommand();
b.addCommand(c2);
b.excuteCommands();
}
}
=========================================================
Boy类
package com.linux_lihuafeng.command;
import java.util.ArrayList;
import java.util.List;
public class Boy {
private String name;
private List<Command> commands = new ArrayList<Command>();
//这里还需要一个栈,,记录着执行过的命令,,在这没写
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void pursue(MM mm) {
}
public void doSomeThing () {
}
public void addCommand(Command c) {
this.commands.add(c);
}
public void excuteCommands() {
for(Command c : commands) {
c.execute();
}
}
public void unDoCommands() {
for(Command c : commands) {
c.execute();
}
}
}
=========================================================
Command类
package com.linux_lihuafeng.command;
public abstract class Command {
public abstract void execute();
public abstract void unDo();
}
=========================================================
HugCommand类
package com.linux_lihuafeng.command;
public class HugCommand extends Command{
@Override
public void execute() {
System.out.println("hug");
}
@Override
public void unDo() {
System.out.println("open your arms");
}
}
=========================================================
ShoppingCommand类
package com.linux_lihuafeng.command;
public class ShoppingCommand extends Command{
@Override
public void execute() {
System.out.println("zoo");
}
@Override
public void unDo() {
System.out.println("undo zoo");
}
}