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):工厂类模式提供的是创建单个类的模式.而建造者模 ...
随机推荐
- C++对C语言的非面向对象特性扩充(2)
上一篇随笔写了关于C++在注释,输入输出,局部变量说明的扩充,以及const修饰符与C中的#define的比较,也得到了几位学习C++朋友们的帮助讲解,十分感谢,我也希望欢迎有更多学习C++的朋友一起 ...
- 「Foundation」结构体
一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...
- [C/C++基础]读写文件
1.打开.关闭文件: FILE* fp = fopen(string.c_str(), FLAG); string.c_str():需用C语言字符串形式: FLAG说明: r: 只读方式打开: w: ...
- Python之路:Python简介
Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...
- xml校验问题
struts2使用xml校验 按照书本输入dtd约束文件 "-//OpenSymphony Group//XWork Validator 1.0.2//EN""http: ...
- Code 16K 码
Code 16K 码是一种多层.连续型.可变长度的条码符号,可以表示全ASCII字符集的128个字符及扩展ASCII字符.它采用UPC及Code128字符.一个16层的Code 16K符号,可以表示7 ...
- pageContext.request.contextPath 和 request.getContextPath()
作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的. El表达式的写法:${pageContext.request.contextPath} jsp的写法:<%=request.g ...
- AOP(转)
AOP是什么?AOP(Aspect-Oriented Programming),面向切面编程,看着是跟OOP(面向对象编程)挺相近的,但实际上又有什么区别呢?OOP具有封装,继承,多态等东西来定义从上 ...
- MFC不使用对话框资源模版创建对话框
在MFC程序中使用对话框时首先在资源模版里创建对话框资源,然后DoModal()或者CReate显示出模式对话框或者非模式对话框,这样创建出的对话框移植性差,从一个工程移动到另一个工程比较麻烦. 在M ...
- libpng causes error concerning pngconf.h
Bug Description Ubuntu Gutsy Gibbon 7.10 - libpng 1.2.15~beta5-2ubuntu0.1 (bug probably concerned wi ...