命令模式:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求队列或记录请求日志,以及支持可撤销的操作。
上面是书中对命令模式的定义,不过觉得好像不那么好理解。
书中另一个形象一点的解释是:军队作战,指挥官请求三连偷袭敌人,但指挥官不会直接跟三连联系,将这个请求形成一个"作战命令",只要将这个“作战命令”执行,指挥官就能达到偷袭敌人的目的。
命令模式中的四种角色:
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(); //取消偷袭敌人命令 } }
相关推荐
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
我们并不认为这组设计模式是完整的和一成不变的,它只是我们目前对设计的思考的记录。因此我们欢迎广大读者的批评与指正,无论从书中采用的实例、参考,还是我们遗漏的已知应用,或应该包含的设计模式等方面。你...
命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 3. 模式中角色 3.1 抽象命令...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 ...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
最出名的设计模式,语言诙谐明了。 目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的...这就是命令模式(Command Pattern)。
5.2.2命令模式实例之公告板系统 5.2.3解释器模式实例之机器人控制程序 5.2.4迭代器模式实例之商品名称遍历 5.2.5中介者模式实例之温度转换器 5.2.6备忘录模式实例之游戏恢复点设置 5.2.7观察者模式实例之股票...
命令模式把发出命令的责任 命令模式 和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方 独 立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收, 以及...
5.2CommandPattern(命令模式) 179 5.2.1定义 179 5.2.2现实中的实例——餐馆订菜 180 5.2.3C#实例——简单计算器 181 5.2.4Java实例——总开关 185 5.2.5优势和缺陷 189 5.2.6应用情景 189 5.3Interpreter...
5.2CommandPattern(命令模式) 179 5.2.1定义 179 5.2.2现实中的实例——餐馆订菜 180 5.2.3C#实例——简单计算器 181 5.2.4Java实例——总开关 185 5.2.5优势和缺陷 189 5.2.6应用情景 189 5.3Interpreter...
将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化。请求排队或者记录请求日志,以及支持可撤销的操作