`
xgcai
  • 浏览: 8187 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

设计模式记录--命令模式

阅读更多

命令模式:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求队列或记录请求日志,以及支持可撤销的操作。

 

上面是书中对命令模式的定义,不过觉得好像不那么好理解。

 

书中另一个形象一点的解释是:军队作战,指挥官请求三连偷袭敌人,但指挥官不会直接跟三连联系,将这个请求形成一个"作战命令",只要将这个“作战命令”执行,指挥官就能达到偷袭敌人的目的。

 

命令模式中的四种角色:

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();		//取消偷袭敌人命令
	}

}

 

 

 

 

 

 

 

 

 

  • 大小: 20.6 KB
分享到:
评论

相关推荐

    设计模式--C++

    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

    命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    《设计模式》中文版(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 指定对象...

    C# 设计模式系列教程-命令模式

     在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 3. 模式中角色  3.1 抽象命令...

    设计模式(.PDF)

    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 指定对象...

    GOLF设计模式(C++语言版)

    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 设计模式怎样解决...

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

    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)

    将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

    设计模式文档

    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)。

    《设计模式实训教程》【PPT+类图与代码+样章】

    5.2.2命令模式实例之公告板系统 5.2.3解释器模式实例之机器人控制程序 5.2.4迭代器模式实例之商品名称遍历 5.2.5中介者模式实例之温度转换器 5.2.6备忘录模式实例之游戏恢复点设置 5.2.7观察者模式实例之股票...

    C#23种设计模式_示例源代码及PDF

    命令模式把发出命令的责任 命令模式 和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方 独 立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收, 以及...

    深入浅出设计模式(中文版)

    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...

    设计模式之命令模式

    将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化。请求排队或者记录请求日志,以及支持可撤销的操作

Global site tag (gtag.js) - Google Analytics