设计模式总结之命令模式

来源:互联网 发布:mac上安装win7双系统 编辑:程序博客网 时间:2024/05/13 23:08

命令模式:将请求封装成对象,以便使用不同的请求、队列、或者日志来参数化其他对象。命令模式也支持可撤销的操作。也就是说一个命令接收者可以绑定一系列请求,然后通过调用接受者的执行方法来执行就可以了。将一系命令通过一个命令的执行者来执行。

这里模仿一个用遥控器对点灯开关的命令模式。

package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日  * 类说明 */public class SimpleRemoteControlWithUndo {Command[] onCommands;//这里可以根据情况来定义,执行方法时可根据情况去遍历执行命令Command[] offCommands;Command undoCommand;public SimpleRemoteControlWithUndo() {onCommands = new Command[5];offCommands = new Command[5];NoCommand noCommand = new NoCommand();for (int i = 0; i < 5; 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 onButtonWasPressed(int slot){onCommands[slot].excute();undoCommand = offCommands[slot];}public void offButtonWasPressed(int slot){offCommands[slot].excute();undoCommand = offCommands[slot]; }public void undoButtonWasPressed(){undoCommand.undo();}}
package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日  * 类说明 首先让所有的命令对象实现相同的包含一个方法的接口。即excute() * 和一个撤销的方法undo() */public interface Command {public void excute();public void undo();}
package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日 * 类说明 */public class CommandTest {public static void main(String[] args) {Light light = new Light();SimpleRemoteControlWithUndo controlWithUndo= new SimpleRemoteControlWithUndo();controlWithUndo.setCommand(0, new LightOnCommand(light),new LightOffCommand(light));controlWithUndo.offButtonWasPressed(0);controlWithUndo.undoButtonWasPressed();}}
package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日  * 类说明 light类有两个方法,on和off */public class Light {private boolean light;public void on(){light = true;System.out.println("the light is on");}public void off(){light = false;System.out.println("the light is off");}}
package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日  * 类说明 */public class LightOffCommand implements Command{private Light light;public LightOffCommand(Light light) {super();this.light = light;}@Overridepublic void excute() {light.off();;}@Overridepublic void undo() {light.on();}}
package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日  * 类说明实现打开电灯的命令。 */public class LightOnCommand implements Command{Light light;public LightOnCommand(Light light) {super();this.light = light;}@Overridepublic void excute() {light.on();}@Overridepublic void undo() {light.off();}}
package com.modedesign.command;/** * @author ctt: * @version 创建时间:2016年5月13日  * 类说明 */public class NoCommand implements Command{@Overridepublic void excute() {// TODO Auto-generated method stub}@Overridepublic void undo() {// TODO Auto-generated method stub}}











0 0
原创粉丝点击