命令模式的定义: 将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
uml图(暂略)
例子:
/** * 命令接口类 */public interface icommand { /** * 执行接口 */ public void execute(); /** * 撤销接口 */ public void undo();}/** * 具体的命令实现类1 */public class concretecommand1 implements icommand { private receiver1 receiver; public concretecommand1(receiver1 receiver) { this.receiver = receiver; } @override public void execute() { system.out.println("concretecommand1 execute..."); receiver.dosomething(); } @override public void undo() { system.out.println("concretecommand1 undo..."); receiver.dosomething2(); } }/** * 具体的命令实现类2 */public class concretecommand2 implements icommand { private receiver2 receiver; public concretecommand2(receiver2 receiver) { this.receiver = receiver; } @override public void execute() { system.out.println("concretecommand2 execute..."); receiver.dosomething(); } @override public void undo() { system.out.println("concretecommand2 undo..."); receiver.dosomething2(); } }/** * 命令接收者1 */public class receiver1 { /** * 命令具体实现 */ public void dosomething() { system.out.println("receiver1 dosomething..."); } /** * 命令具体实现 */ public void dosomething2() { system.out.println("receiver1 dosomething2..."); } }/** * 命令接收者2 */public class receiver2 { /** * 命令具体实现 */ public void dosomething() { system.out.println("receiver2 dosomething..."); } /** * 命令具体实现 */ public void dosomething2() { system.out.println("receiver2 dosomething2..."); } }/** * 命令模式的使用 */public class testcommand { /** * @param args */ public static void main(string[] args) { icommand command1 = new concretecommand1(new receiver1()); command1.execute(); command1.undo(); icommand command2 = new concretecommand2(new receiver2()); command2.execute(); command2.undo(); }}