【设计模式】行为型06命令模式(Command Pattern)
命令模式
个人理解:命令模式,本质上是一种多层次的封装。
好处:降低耦合,扩展极其方便。
以下一段文案摘抄自:http://www.runoob.com/design-pattern/command-pattern.html个人有些难以深入理解,待日后细细体会:
意图:命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开。
主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。
博主参考了网上很多例子,去掉了一些冗余功能,精简了demo使其更加便于理解,如下:
类图(晚上画):
代码:
1、实际的请求类,拥有所有的具体功能:
package com.pat.command;
/**
* 请求类-具体被操作
* @author ZX
*/
public class Receiver{
public void takeOff() {
System.out.println("起飞功能");
}
public void land() {
System.out.println("降落功能");
}
}
2、命令的封装:
package com.pat.command;
/**
* 命令类,所有的命令
* @author ZX
*
*/
public abstract class Command {
public abstract void execute();
}
/**
* 命令A
* @author Administrator
*
*/
class CommandA extends Command{
Receiver receiver;
@Override
public void execute() {
receiver.takeOff();
}
public CommandA(Receiver receiver) {
this.receiver=receiver;
}
}
/**
* 命令B
* @author Administrator
*
*/
class CommandB extends Command{
Receiver receiver;
@Override
public void execute() {
receiver.land();
}
public CommandB(Receiver receiver) {
this.receiver=receiver;
}
}
3、控制中心:
package com.pat.command;
/**
* 指挥中心
* @author ZX
*
*/
public class CommandCenter {
private Command command;
public CommandCenter(Command command) {
this.command=command;
}
public void call() {
command.execute();
}
}
4、测试类:
package com.pat.command;
public class Test {
public static void main(String[] args) {
//指挥中心执行A命令
CommandCenter APlan = new CommandCenter(new CommandA(new Receiver()));
APlan.call();
//指挥中心执行B命令
CommandCenter BPlan= new CommandCenter(new CommandB(new Receiver()));
BPlan.call();
}
}
5、结果:
起飞功能
降落功能
【设计模式】行为型06命令模式(Command Pattern)的更多相关文章
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 设计模式-15命令模式(Command Pattern)
1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- 设计模式 - 命令模式(command pattern) 具体解释
命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...
- 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- 二十四种设计模式:命令模式(Command Pattern)
命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...
- 设计模式----行为型模式之命令模式(Command Pattern)
下面来自head first设计模式的命令模式一章节. 定义 将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 类图 注: 1. ...
- 【UE4 设计模式】命令模式 Command Pattern
概述 描述 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作. 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务 ...
随机推荐
- 简明Python3教程 9.函数
简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...
- 《菊与刀》original 的阅读
0. 词汇 foe:敌人,反对者,危害物: rigid:严格的,僵硬的,死板的, they are incomparably rigid in their behavior, innovation:革 ...
- duilib拖动控制功能的实现(源代码)
转载请注明原始出处.谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41144283 duilib库中原本没有显示的对控件添加拖拽的功能.而实 ...
- TemplatePart用法说明
原文:TemplatePart用法说明 TemplatePart(Name="PART_Decrease", Type=typeof(RepeatButton)) 一直没明白这是干 ...
- springboot 使用日志
spring boot 默认使用日志打印到console 添加application.properties文件在src/main/resoures文件夹下 logging.file=my.log 将日 ...
- 测试WPF绑定bug
1.低级错误:有没有绑错2.去属性那里打断点,get.set有没有进3.xaml加上twoway,UpdateSourceTrigger=PropertyChanged
- layerui
引用layer.js,官网:http://layer.layui.com/常用属性:btn/icon/skin/time/content/yes(点击确认.提交) 常用窗体.alert layer.a ...
- Qt 显示 GIF
Qt 中,静态图片 PNG,JPG 等可以用其创建 QPixmap,调用 QLabel::setPixmap() 来显示,但是能够具有动画的 GIF 却不能这么做,要在 QLabel 上显示 GIF, ...
- js 注册事件
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Vue-cli入门(一)——项目搭建
Vue-cli入门(一)——项目搭建 前言: Vue-cli是一款基于vue的项目脚手架工具,其集成了webpack环境和主要的依赖,对于我们的项目搭建.开发.打包.维护管理等都是非常的方便. 主要内 ...