命令模式:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求队列或记录请求日志,以及支持可撤销的操作。
上面是书中对命令模式的定义,不过觉得好像不那么好理解。
书中另一个形象一点的解释是:军队作战,指挥官请求三连偷袭敌人,但指挥官不会直接跟三连联系,将这个请求形成一个"作战命令",只要将这个“作战命令”执行,指挥官就能达到偷袭敌人的目的。
命令模式中的四种角色:
1、接受者:负责执行请求相关的操作。
2、命令:是一个接口,规定执行请求的方法。
3、具体命令:命令接口的实现,规定命定怎么执行。
4、请求者:包含命令接口的应用,调用具体的命令。 UML类图:
UML类图:(见文末,格式排版问题,只好放在最后面了。。。。)
命令模式程序小片段:
1、命令接口
/** * */ package org.rico.pattern.demo.command; /** * @author rico 2013-2-27 * 命令接口 */ public interface Command { /** * 执行偷袭命令 */ public void execute(); /** * 取消命令 */ public void undo(); }
2、命令接口实现
/** * */ package org.rico.pattern.demo.command; /** * @author rico 2013-2-27 */ public class ConcreteCommand implements Command { private Receiver receiver; public ConcreteCommand(Receiver receiver) { this.receiver = receiver; } /* 执行偷袭命令(non-Javadoc) * @see org.rico.pattern.demo.command.Command#execute() */ @Override public void execute() { receiver.execute(); } /* 取消命令(non-Javadoc) * @see org.rico.pattern.demo.command.Command#undo() */ @Override public void undo() { receiver.undo(); } }
3、接收者
/** * */ package org.rico.pattern.demo.command; /** * @author rico 2013-2-27 * 接收者 */ public class Receiver { /** * 偷袭敌人 */ public void execute() { System.out.println("偷袭敌人命令...."); } /** * 取消偷袭敌人 */ public void undo() { System.out.println("取消偷袭敌人命令...."); } }
4、请求者
/** * */ package org.rico.pattern.demo.command; /** * @author rico 2013-2-27 * 请求者 */ public class Invoker { private Command command; public Invoker(Command command) { this.command = command; } /** * 偷袭敌人 */ public void execute() { command.execute(); } /** * 取消偷袭 */ public void undo() { command.undo(); } }
5、命令模式测试
/** * */ package org.rico.pattern.demo.command; /** * @author rico 2013-2-27 * */ public class DemoTest { /** * @param args */ public static void main(String[] args) { //定义接收者 Receiver receiver = new Receiver(); //定义命令 Command command = new ConcreteCommand(receiver); //定义请求者 Invoker invoker = new Invoker(command); invoker.execute(); //偷袭敌人命令 invoker.undo(); //取消偷袭敌人命令 } }
相关推荐
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象和执行命令的...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java编程中,命令模式的应用广泛且实用。 命令模式的核心是将...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...
- 命令模式:将请求封装为一个对象,以便使用不同的请求、队列请求或记录请求。 - 解释器模式:提供一个语言的文法表示,并定义了一个接口,用于解释语言中的句子。 - 迭代器模式:提供一种方法顺序访问聚合对象...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本例中,我们将通过模仿遥控器来理解命令模式的应用。 遥控器...
《新版设计模式手册 - C#设计模式(第二版)》是一部深入探讨C#编程中设计模式的权威指南,尤其适合已经有一定C#基础并希望提升软件设计能力的开发者阅读。设计模式是解决软件开发中常见问题的经验总结,是软件工程的...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本专题中,我们将深入探讨命令模式,并通过Python和C++两种...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在iOS开发中,命令模式尤其适用于处理事件驱动的编程场景,因为...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象和执行命令的...
### 设计模式精解-GoF 23种设计模式解析 #### 0.1 设计模式解析(总序) 设计模式是软件工程领域的重要概念之一,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式,被...
Java 命令模式设计模式详解 命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,...
14. **命令模式**:命令模式将请求封装为一个对象,从而可以使用不同的请求、队列请求、记录请求日志、支持撤销操作等功能。 15. **解释器模式**:解释器模式用于构建解析特定语言的解析器,它定义了一个表达式接口...