转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39804057

命令模式(Command):将“请求”(命令/口令)封装成一个对象,以便使用不同的请求、队列或者日志来參数化其对象。

命令模式也支持撤销操作。命令模式的目的就是达到命令的发出者和运行者之间解耦,实现请求和运行分开。

一、uml建模

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGh5X3ljdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

二、代码实现:

/**
* 演示样例:以咱去餐馆吃饭为例,分为3步
*
* 1、和小二说,来个宫保鸡丁 --> 顾客发出口令
*
* 2、小二来了一句:宫保鸡丁一份。 这时命令被传递到了厨师。--> 口令传递到了厨师
*
* 3、然后厨师就開始做宫保鸡丁去了。 --> 厨师依据口令去运行
*
* 从这3步能够看到,宫保鸡丁并非我想吃就我来做,而是传达给别人去做。
*
* 我要的是一个结果——宫保鸡丁这道菜做好了。而我无需去关系这道菜是怎么去做的。 */
interface Command {
/**
* 口令运行
*/
public void execute(); /**
* 口令撤销
*/
public void undo();
} /**
* 口令 -- 经小二传递
*/
class OrderCommand implements Command {
private CookReceiver cook; public OrderCommand(CookReceiver cook) {
this.cook = cook;
} @Override
public void execute() {
cook.cooking();
} @Override
public void undo() {
cook.unCooking();
}
} /**
* 厨师--真正的口令运行者
*/
class CookReceiver {
public void cooking() {
System.out.println("開始炒宫保鸡丁了...");
} public void unCooking() {
System.out.println("不要炒宫保鸡丁了...");
}
} /**
* 顾客--真正的口令发出者
*/
class Customer {
private Command command; public Customer(Command command) {
this.command = command;
} /**
* 将命令的发出与运行分开
*/
public void order() {
command.execute();
} public void unOrder() {
command.undo();
}
} /**
* client測试类
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
/**
* 等待口令的运行者 --炒菜总得有个厨师吧.
*/
CookReceiver receiver = new CookReceiver();
/**
* 等待将口令传达给厨师 --由于顾客要什么菜还不知道,但口令始终要传达到厨师耳朵里这是肯定的。
*/
Command cmd = new OrderCommand(receiver);
Customer customer = new Customer(cmd);
/**
* 运行口令
*/
customer.order();
/**
* 撤销口令
*/
customer.unOrder();
}
}

三、应用场景

菜馆点餐、遥控器、队列请求、日志请求。

四:小结

从上面的演示样例能够看到:命令模式将“动作的请求者”从“动作的运行者”对象中解耦出来。这就是将方法的调用封装起来的优点。

Java设计模式菜鸟系列(七)命令模式建模与实现的更多相关文章

  1. Java设计模式菜鸟系列(一)策略模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天開始咱们来谈谈Java设计模式. 这里会结合uml图形来解说,有对uml ...

  2. Java设计模式菜鸟系列(九)外观模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...

  3. Java设计模式菜鸟系列(十七)桥接模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使 ...

  4. Java设计模式菜鸟系列(十)模板方法模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的 ...

  5. Java设计模式(22)命令模式(Command模式)

    Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...

  6. java设计模式(六) 命令模式

    [命令模式]将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作. 1,定义命令接口 package com.pattern.comm ...

  7. Java设计模式菜鸟系列(十四)代理模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...

  8. Java设计模式菜鸟系列(十三)建模和实现状态模式

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):同意对象在内部状态改变时改变它的行为,对象看起来好像 ...

  9. Java设计模式菜鸟系列(十五)建造者模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...

随机推荐

  1. 电信光纤猫 f412超级密码

    中兴F412光猫超级密码破解.破解用户限制.关闭远程控制.恢复路由器拨号 http://bbs.mydigit.cn/simple/?t1021161.html 不少家庭都改了光纤入户,那肯定少不了光 ...

  2. 「OC」 继承

    一.基本用法 1.设计两个类Bird.Dog 1 // Bird的声明 2 @interface Bird : NSObject 3 { 4 @public 5 int weight; 6 } 7 - ...

  3. python学习之lambda匿名函数

    1 Python支持运行时使用“lambda”建立匿名函数(anonymous functions that are not bound to a name). python "lambda ...

  4. c++设计模式总结 好久没写博客了 实在是忙

    具体代码就不贴出来了   通俗易懂的理解方式      原创 c++设计模式: 简单工厂模式 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品 ...

  5. A package manager for Qt

    官网 http://www.qpm.io/ A package manager for Qt 注释:这个网站类似JavaScript的包管理器的网站https://www.npmjs.com/ 都是给 ...

  6. Linux学习:find、chmod、ps命令

    下面介绍下linux下find.chmod.ps这三个常见命令的使用. 这每个命令都有很多可选的参数,不同参数体现的功能不一样.我们这里不一一介绍各种参数的含义,只介绍最常见的使用场景. 一.find ...

  7. PencilDraw: 用简化的C语言画图!

    最近做的一个东西,不过功能还不是太完善,而且界面极丑.慢慢改进吧. 点这里打开!

  8. SpringMVC+Mybatis+Mysql实战项目学习--环境搭建

    1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...

  9. iOS开发进阶之 UIWebView

    刚接触IOS开发1年多,现在对于混合式移动端开发越来越流行,因为开发成本上.速度上都比传统的APP开发要好,混合式开发是传统模式与PC网页端相结合的模式.那么提到了 APP的混合模式开发,在Andro ...

  10. akka actor 的request-response简单实现

    注:本文章是看blog后的一个阶段小结,只作为个人笔记, 原文链接:http://www.iteblog.com/archives/1154 官网地址贴上:http://doc.akka.io/doc ...