《Head First 设计模式》命令模式

来源:互联网 发布:威斯布鲁克数据 编辑:程序博客网 时间:2024/05/21 22:41

命令模式:将请求封装为对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。


package headfirst.command.undo;import java.util.*;//// This is the invoker//public class RemoteControlWithUndo {Command[] onCommands;Command[] offCommands;Command undoCommand; public RemoteControlWithUndo() {onCommands = new Command[7];offCommands = new Command[7]; Command noCommand = new NoCommand();for(int i=0;i<7;i++) {onCommands[i] = noCommand;offCommands[i] = noCommand;}undoCommand = noCommand;}  public void setCommand(int slot, Command onCommand, Command offCommand) {onCommands[slot] = onCommand;offCommands[slot] = offCommand;} public void onButtonWasPushed(int slot) {onCommands[slot].execute();undoCommand = onCommands[slot];} public void offButtonWasPushed(int slot) {offCommands[slot].execute();undoCommand = offCommands[slot];} public void undoButtonWasPushed() {undoCommand.undo();}  public String toString() {StringBuffer stringBuff = new StringBuffer();stringBuff.append("\n------ Remote Control -------\n");for (int i = 0; i < onCommands.length; i++) {stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName()+ "    " + offCommands[i].getClass().getName() + "\n");}stringBuff.append("[undo] " + undoCommand.getClass().getName() + "\n");return stringBuff.toString();}}


0 0
原创粉丝点击