行为类模式(二):命令(Command)
定义
将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
UML

优点
- 能比较容易的设计一个命令队列
- 可以较容易的将命令加入日志
- 允许接收请求的一方是否处理请求
- 可以容易的实现对请求的添加和删除
- 加进新的具体命令类不会影响到其他的类,增加具体命令类很容易
- 把请求一个操作的对象与指导怎么执行一个操作对象分开(解耦)
缺点
- 使用命令模式可能会导致某些系统有过多的具体命令类。
应用场景
- 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
- 系统需要在不同的时间指定请求、将请求排队和执行请求。
- 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
- 系统需要将一组操作组合在一起,即支持宏命令。
示例
用命令模式模拟主机按下开机按钮后主机内部的开机流程。
Java
public class Main
{
public static void main(String[] args)
{
//组装主机
IMainBoard mainBoard = new GigaMainBoard();
ICommand openCommand = new OpenCommand(mainBoard);
Box box = new Box();
box.setOpenCommand(openCommand);
//执行开机命令
box.openButtonPressed();
} /**
* 主板接口
*/
public interface IMainBoard
{
/**
* 开机
*/
void open();
} /**
* 技嘉主板
*/
public static class GigaMainBoard implements IMainBoard
{
@Override
public void open()
{
System.out.println("技嘉主板当前正在开机");
System.out.println("接通电源");
System.out.println("设备检查");
System.out.println("装载系统");
System.out.println("机器开始运行起来");
System.out.println("已开机");
}
} /**
* 命令接口
*/
public interface ICommand
{
/**
* 执行命令的操作
*/
void execute();
} /**
* 主板开机命令
*/
public static class OpenCommand implements ICommand
{
private IMainBoard mainBoard; public OpenCommand(IMainBoard mainBoard)
{
this.mainBoard = mainBoard;
} @Override
public void execute()
{
mainBoard.open();
}
} /**
* 机箱类
*/
public static class Box
{
private ICommand openCommand; public void setOpenCommand(ICommand openCommand)
{
this.openCommand = openCommand;
} /**
* 按下开机按钮
*/
public void openButtonPressed()
{
openCommand.execute();
}
}
}
行为类模式(二):命令(Command)的更多相关文章
- 行为型模式(二) 命令模式(Command)
一.动机(Motivate) 在我们的现实生活中有很多例子可以拿来说明这个模式,我们还拿吃饺子这个事情来说.我的奶奶说了,今天想吃饺子,发出了命令,然后我奶奶就去看电视去了.我们夫妻俩收到命令就开始和 ...
- 二十二、Command 命令模式
原理: 时序图: 代码清单: command.Command public interface Command { void execute(); } command.MacroCommand pub ...
- 设计模式---行为变化模式之命令模式(Command)
前提:行为变化模式 在组件的构建过程中,组建行为的变化经常导致组件本身剧烈的变化.“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件的变化,实现两者之间的松耦合. 类中非虚函数和静态函数方法 ...
- 设计模式C++描述----19.命令(Command)模式
一. 举例说明 我们知道,在多线程程序中,多个用户都给系统发 Read 和 Write 命令.这里有几点需要说明: 1. 首先明确一点,所有的这些 Read 和 Write 命令都是调用一个库函数. ...
- 命令模式与go-redis command设计
目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...
- 设计模式14---设计模式之命令模式(Command)(行为型)
1.场景模拟 请用软件模拟开机过程 按下启动按钮 然后电源供电 主板开始加电自检 BIOS依次寻找其他设备的BIOS并且让他们初始化自检 开始检测CPU,内存,光盘,硬盘,光驱,串口,并口,软驱即插即 ...
- 十五、命令(Command)模式--行为型模式(Behavioral Pattern)
命令模式又称为行动(Action)模 式或交易(Transaction)模式.命令模式把一个请求或者操作封装到一个对象中. 命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派 ...
- Command模式(命令设计模式)
Command?? 把方法的调用用一个类的实例来承载,要管理工作的历史记录,创建这些方法执行的命令的集合,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是将多个过去的命令整合为一个新 ...
- 命令(Command)模式
命令模式又称为行动(Action)模式或者交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可 ...
- python 设计模式之命令(Command)模式
#写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...
随机推荐
- svn 命令行下常用的几个命令
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domai ...
- DOM,浏览器,javascript,html之间的关系
来源于:https://github.com/hucheng91/myBlog/blob/master/web/dom/dom.md DOM定义 DOM可以以一种独立于平台和语言的方式访问和修改一个文 ...
- Node.js的一些基本概念
1. Node.js简介 1.1 Node.js是什么 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js是一个能够在服务器端运行JavaScript的开放源代码.跨 ...
- 完善_IO, _IOR, _IOW, _IOWR 宏的用法与解析
_IO, _IOR, _IOW, _IOWR 宏的用法与解析 原文地址:http://www.eefocus.com/ayayayaya/blog/12-03/245777_20cdd.html 作 ...
- 解决编译Apache出现的问题:configure: error: APR not found
今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...
- java的几个format
public static String formatDateToString(long date) { SimpleDateFormat formatter = new SimpleDateForm ...
- Java8 lambda表达式10个示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...
- 【MongoDB】MongoDB的安装教程
1,MongoDB简介 MongoDB也是一种数据库,只不过它既不是关系型数据库,也不是非关系型数据库(NoSQL),而是一种介于关系型数据库和NoSQL之间的一种数据库.如果说非关系型数据库是轻量级 ...
- iOS 不支持 PWA,那又怎么样?
原文链接http://www.zcfy.cc/article/ios-doesn-8217-t-support-progressive-web-apps-so-what-cloud-four-3400 ...
- mac下 cordova 搭建
最近遇到一个cordova搭建的项目,于是看了看如何搭建这个. 这个其实 和 phoneGap 差不多,都是为了方便html跨平台才产生的产物. cordova 也可以生成 iOS 和 安卓 ...