`
zhaohongwei1982
  • 浏览: 7933 次
  • 性别: Icon_minigender_1
  • 来自: 天上人间
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

设计模式——command

    博客分类:
  • java
阅读更多

什么是command模式?

  GOF 在《设计模式》一书中阐述其意图:“将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。”这里所谓的“不同的请求”也既意味着请求可能发生的变化,是一个可能扩展的功能点。

 

uml类图:

 

 有趣的例子

《设计模式的有趣解释-追MM》中解释:Command—俺有一个mm家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我。这不,她弟弟又传送过来一个command,为了感谢他,我请他吃了碗杂酱面,哪知道他说:我同时给我姐姐三个男朋友送command,就数你最小气,才请我吃面。

 

简单实现

/**
 * Mm的男朋友,相当于receiver,负责执行命令来满足Mm的要求;
 *
 */
public interface BoyFriend {
	void meetRequest();
}

/**
 *Mm会唱歌的男朋友
 *
 */
public class SingBoy implements BoyFriend {
	@Override
	public void meetRequest() {
		System.out.println("i sing 4 u!");
	}
}

/**
 * Mm会跳舞的男朋友
 *
 */
public class DancingBoy implements BoyFriend {
	@Override
	public void meetRequest() {
		System.out.println("i dancing 4 u!");
	}
}


/**
 * Mm的命令,声明命令的接口
 *
 */
public interface Command {
 void execute();
}

/**
 * 一个默认Command实现(目前只涉及才艺表演);
 * 
 */
public class DefaultCommandImpl implements Command {

	private BoyFriend boyFriend;

	public DefaultCommandImpl(BoyFriend boyFriend) {
		this.boyFriend = boyFriend;
	}

	public void execute() {
		boyFriend.meetRequest();
	}
}

/**
 * Mm的弟弟,相当于Invoker,负责传递命令给Mm的男朋友,具体Mm的每个男朋友如何执行命令不关心(只关心请他吃什么)
 *
 */
public class MmBrother {
	List<Command> commands = new ArrayList<Command>();;

	public void sendCommand() {
		for (Command command : commands) {
			command.execute();
		}
	}

	public void addCommand(Command command) {
		commands.add(command);
	}
}

/**
 *mm本人,相当于客户端,肯定知道自己的弟弟和三个男朋友;
 *派弟弟给男朋友们传递命令
 *
 */
public class Mm {
	public static void main(String[] args) {
		BoyFriend me = new Me();
		BoyFriend singBoy = new SingBoy();
		BoyFriend dancingBoy = new DancingBoy();

		MmBrother brother = new MmBrother();
		brother.addCommand(new DefaultCommandImpl(me));
		brother.addCommand(new DefaultCommandImpl(singBoy));
		brother.addCommand(new DefaultCommandImpl(dancingBoy));

		brother.sendCommand();
	}
}

总结

     命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收 ,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

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

相关推荐

    设计模式——可复用面向对象软件的基础(1)

    在《设计模式——可复用面向对象软件的基础》这本书中,作者Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称GoF)首次提出了23种面向对象设计模式。这些模式涵盖了不同设计场景,如创建型模式、...

    设计模式——命令模式

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

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

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

    JAVA单元测试JUnit

    #### 四、JUnit中的设计模式——Command模式详解 ##### 4.1 Command模式的引入 **问题情境**:JUnit需要处理来自不同来源的测试用例(TestCase),并将它们组织成请求,执行测试并返回结果。这要求测试用例开发者...

    23种 设计模式---面向对象的基本原则

    设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,为软件开发提供了可复用的解决方案。在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    设计模式精解——GoF23中设计模式解析

    ### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    EJB设计模式概述——讲解EJB设计模式的重要性及常用的模式

    【EJB设计模式概述】 EJB(Enterprise JavaBeans)设计模式是解决在Java EE平台中使用EJB组件遇到的问题和挑战的一种策略。这些模式旨在优化系统性能、可扩展性、可维护性,以及提高组件的重用性。在大型、复杂的...

    设计模式作业——用命令模式java语言编写的烧烤店

    在这个“设计模式作业——用命令模式java语言编写的烧烤店”项目中,我们将探讨如何运用命令模式来构建一个模拟烧烤店的系统。命令模式是一种行为设计模式,它将请求封装为一个对象,使得我们可以参数化不同的请求、...

    X-gen PPT下载——《研磨设计模式》 实战

    《研磨设计模式》实战是IT领域中关于软件设计的一份重要资料,它主要探讨了设计模式在实际项目中的应用。设计模式是软件工程中经过长期实践总结出的通用问题解决方案,是解决常见设计问题的经验总结。这份PPT可能是...

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

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    详解Java设计模式——命令模式

    命令模式是Java设计模式中的一种常见模式,主要用于将命令的发出者和执行者之间解耦,实现请求和执行分开。 命令模式的定义是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。它的主要目的是...

    设计模式PPT---25种设计模式详解

    这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...

    设计模式PDF

    这本书的核心理念是将实践中证明有效的解决方案——设计模式——以规范化的形式呈现出来,供开发者在遇到类似问题时参考和借鉴。设计模式是软件开发中的一种通用语言,它们代表了在特定情境下解决特定问题的最佳实践...

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

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它为解决特定问题提供了一套标准的解决方案。《设计模式精解——GoF 23种设计模式解析及C++实现源码...

Global site tag (gtag.js) - Google Analytics