`
xgcai
  • 浏览: 8660 次
  • 性别: 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
分享到:
评论

相关推荐

    设计模式----命令模式

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象和执行命令的...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    设计模式--命令模式java例子

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java编程中,命令模式的应用广泛且实用。 命令模式的核心是将...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    Java设计模式----通俗易懂版

    - 命令模式:将请求封装为一个对象,以便使用不同的请求、队列请求或记录请求。 - 解释器模式:提供一个语言的文法表示,并定义了一个接口,用于解释语言中的句子。 - 迭代器模式:提供一种方法顺序访问聚合对象...

    设计模式--命令模式 (模仿遥控器)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本例中,我们将通过模仿遥控器来理解命令模式的应用。 遥控器...

    新版设计模式手册 - C#设计模式(第二版)

    《新版设计模式手册 - C#设计模式(第二版)》是一部深入探讨C#编程中设计模式的权威指南,尤其适合已经有一定C#基础并希望提升软件设计能力的开发者阅读。设计模式是解决软件开发中常见问题的经验总结,是软件工程的...

    设计模式专题之(十四)命令模式---设计模式命令模式示例代码(python--c++)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本专题中,我们将深入探讨命令模式,并通过Python和C++两种...

    设计模式-命令模式

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在iOS开发中,命令模式尤其适用于处理事件驱动的编程场景,因为...

    设计模式-命令模式(讲解及其实现代码)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象和执行命令的...

    设计模式精解-GoF 23种设计模式解析

    ### 设计模式精解-GoF 23种设计模式解析 #### 0.1 设计模式解析(总序) 设计模式是软件工程领域的重要概念之一,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式,被...

    java常用设计模式-命令模式

    Java 命令模式设计模式详解 命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,...

    设计模式----文字版

    14. **命令模式**:命令模式将请求封装为一个对象,从而可以使用不同的请求、队列请求、记录请求日志、支持撤销操作等功能。 15. **解释器模式**:解释器模式用于构建解析特定语言的解析器,它定义了一个表达式接口...

Global site tag (gtag.js) - Google Analytics