Java设计模式菜鸟系列(七)命令模式建模与实现
转载请注明出处: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设计模式菜鸟系列(七)命令模式建模与实现的更多相关文章
- Java设计模式菜鸟系列(一)策略模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天開始咱们来谈谈Java设计模式. 这里会结合uml图形来解说,有对uml ...
- Java设计模式菜鸟系列(九)外观模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...
- Java设计模式菜鸟系列(十七)桥接模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使 ...
- Java设计模式菜鸟系列(十)模板方法模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- java设计模式(六) 命令模式
[命令模式]将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作. 1,定义命令接口 package com.pattern.comm ...
- Java设计模式菜鸟系列(十四)代理模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...
- Java设计模式菜鸟系列(十三)建模和实现状态模式
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):同意对象在内部状态改变时改变它的行为,对象看起来好像 ...
- Java设计模式菜鸟系列(十五)建造者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...
随机推荐
- 网站压力测试之ApacheBench
ApacheBench是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可以同时模拟多个并发请求.使用yum安装apache,ab工具在/us ...
- python成长之路——第八天
pickle,load :切记:如果load的是个对象的话,必须导入构建这个对象的类 封装 类和对象的关系: 每个对象里都有一个类对象指针,指向类 继承:支持单继承和多继承 print ...
- Django : Table 'MyDjango.django_admin_log' doesn't exist
原因: 添加admin之后,没有运行 manage.py syncdb 解决方法: 在命令行中运行manage.py syncdb 即可 运行截图:
- 在verilog中关于inout口的设计方法
在学习IIC的时候我们知道这么设计inout inout scl : reg scl_reg , scl_en ; scl = scl_en ? scl_reg : 1'dz ; 当 ...
- vc 获取网页内容(HTTP)
BOOL bResult = FALSE; // 初始化WinInet 环境 HINTERNET hInternet = InternetOpen("CEHTTP", ...
- 手把手教你在Windows端搭建Redmine项目管理软件
1.Redmine介绍 Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的 ...
- 第四种:GCD
GCD 1> 概述 Grand Central Dispatch (GCD)是Apple开发的一种多核编程技术.主要用于优化应用程序以支持多核处理器以及其他对称多处理系统. GCD提供函数实现多 ...
- How many integers can you find(容斥+dfs容斥)
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- easui tree载入时自动展开无子节点的节点
利用loadFilter对后台返回的原始数据进行过滤处理,将数据中的state字段修改相应的值,若无子节点,则改成open,若有子节点,则改成closed. 由于一个node属性只有下面几项内容,因此 ...
- eclipse config 3 构造pydev
什么是不是说生命是短暂的.我用python 准备工作 sudo apt-get install python3-dev 例如以下操作 依次点击菜单 Help->Install New Softw ...