1.背景:
站在MM的角度,想命令追求者Boy干什么就干什么,而且將來還可以擴展,怎么做?
2.代碼:
Command.java:
package com.cy.dp.command; public abstract class Command { public abstract void execute(); //執行命令 public abstract void undo(); //取消執行命令 }
Command的實現類ShoppingCommand:(逛街命令)

package com.cy.dp.command; public class ShoppingCommand extends Command { @Override public void execute() { System.out.println("zoo"); } @Override public void undo() { System.out.println("undo zoo"); } }
Command的實現類HugCommand:(擁抱命令)

package com.cy.dp.command; public class HugCommand extends Command{ @Override public void execute() { System.out.println("hug"); } @Override public void undo() { System.out.println("open your arms"); } }
Boy.java:
package com.cy.dp.command; import java.util.ArrayList; import java.util.List; public class Boy { private String name; private List<Command> commands = new ArrayList<Command>(); //private List<Command> doCommands; 裝的是已經執行過的command,用於undo public String getName() { return name; } public void setName(String name) { this.name = name; } public void pursue(MM mm){ } public void executeCommands(){ for(Command c : commands){ c.execute(); } } public void undoCommands(){ //循環doCommands來undo //用棧來操作,最后執行的操作先undo } public void addCommand(Command c){ this.commands.add(c); } }
MM.java:
package com.cy.dp.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(); Command c2 = new HugCommand(); b.addCommand(c1); b.addCommand(c2); b.executeCommands(); } }