(35)23种设计模式研究之六【命令模式】
命令模式
一:定义
将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。
二:实现
解决的问题
在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
模式中角色
1 抽象命令(Command):定义命令的接口,声明执行的方法。
2 具体命令(ConcreteCommand):具体命令,实现要执行的方法,它通常是“虚”的实现;通常会有接收者,并调用接收者的功能来完成命令要执行的操作。
3 接收者(Receiver):真正执行命令的对象。任何类都可能成为一个接收者,只要能实现命令要求实现的相应功能。
4 调用者(Invoker):要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
5 客户端(Client):命令由客户端来创建,并设置命令的接收者。
三:模式分析
4.4 模式分析
4.4.1 本质:对命令进行封装,将发出命令与执行命令的责任分开。
4.4.2 每一个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。
4.4.3 请求方和接收方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
4.4.4 使请求本身成为一个对象,这个对象和其它对象一样可以被存储和传递。
4.4.5 命令模式的关键在于引入了抽象命令接口,且发送者针对抽象命令接口编程,只有实现了抽象命令接口的具体命令才能与接收者相关联。
5. 模式总结
5.1 优点
5.1.1 解除了请求者与实现者之间的耦合,降低了系统的耦合度。
5.1.2 对请求排队或记录请求日志,支持撤销操作。
5.1.3 可以容易地设计一个组合命令。
5.1.4 新命令可以容易地加入到系统中。
5.2 缺点
5.2.1 因为针对每一个命令都需要设计一个具体命令类,使用命令模式可能会导致系统有过多的具体命令类。
5.3 适用场景
5.3.1 当需要对行为进行“记录、撤销/重做”等处理时。
5.3.2 系统需要将请求者和接收者解耦,使得调用者和接收者不直接交互。
5.3.3 系统需要在不同时间指定请求、请求排队和执行请求。
5.3.4 系统需要将一组操作组合在一起,即支持宏命令。
6. 应用举例:银行帐号的存款、提款
转载于:https://www.cnblogs.com/wycBlog/p/7426886.html
(35)23种设计模式研究之六【命令模式】相关推荐
- 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...
- 23种设计模式之抽象工厂模式(Abstract Factory Pattern)
前言:大家好,我是小威,24届毕业生,在一家满意的公司实习.本篇文章将23种设计模式中的抽象工厂模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识. 如果文章有什么需要改进的地方还请 ...
- JAVA开发的23种设计模式之 — 装饰器模式 代理器模式
装饰器模式 概述 : 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活 维基百科解释 : 通过使用修饰模式,可以在运行时扩充一个类的功能.原理是 :增加一个修饰类包裹 ...
- GoF的23种设计模式之创建型模式的特点和分类
创建型模式的主要关注点是"怎样创建对象?",它的主要特点是"将对象的创建与使用分离".这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关 ...
- Java经典23种设计模式之结构型模式(二)
接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和 ...
- 23种设计模式之——责任链模式(okhttp 拦截器)
前言 网络七层协议 在现实中的责任链模型之一就是网络连接.对与程序猿而言,七层或五层的网络连接模型是肯定知道的. 当一个网络请求发出时,需要经过应用层->传输层->网络层->连接层- ...
- 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解
工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...
最新文章
- 09-dispatch_source
- 快速开发生命周期支持工具
- (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
- Java8 的 Stream 流式操作之王者归来
- fms安装教程 linux_FMS安装
- Android开发之Gradle多渠道打包总结
- 什么甜食可以代表你的家乡?
- SysLink UserGuide
- .NET 对接JAVA 使用Modulus,Exponent RSA 加密
- windows之无法选择默认打开方式
- VMware ESXi6.0注入8060阵列卡驱动过程记录
- 关于Facebook,Linkedin网的数据采集总结
- 董树义 近代微波测量技术_论文发表 | 基于微波雷达的1200米大跨悬索桥多点变形同步测量...
- 装Linux gpt还是mbr,装机、装系统必备:秒懂MBR和GPT分区表
- 算法为啥子那么难【转】
- 64位驱动 hp630打印机_hp1020打印机64位驱动下载
- Win10系统wifi图标消失无法联网怎么办
- 液晶显示屏的C语言编码,AMPIRE12864液晶C语言代码
- linux需要GPT初始化磁盘吗,PVE里面使用GPT初始化磁盘选项为灰色的解决办法
- 代理模式(静态代理模式、动态代理模式、cgLib代理模式、拦截器)
热门文章
- 使用LoadRunner-运行负载测试
- android 一个字符串分两行显示_重新梳理Android权限管理
- python中的ans是什么意思_python ans
- python学习-数据类型(布尔、空值)
- IntelliJ IDEA开发工具安装Scala插件使用
- Eclipse 的快捷键以及文档注释、多行注释的快捷键 一、多行注释快捷键
- could not find curses mysql_​-- Configuring incomplete-- Could NOT find Curses
- android java获取string.xml_android获取string.xml的值
- mysql查看表内容 很乱_mysql常用命令--15.10.14记录,内容有点乱
- android截图canvas为空,html2canvas截图空白问题的解决