命令模式

一:定义

将一个请求封装为一个对象(即我们创建的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种设计模式研究之六【命令模式】相关推荐

  1. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  2. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  3. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  4. 23种设计模式之抽象工厂模式(Abstract Factory Pattern)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习.本篇文章将23种设计模式中的抽象工厂模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识. 如果文章有什么需要改进的地方还请 ...

  5. JAVA开发的23种设计模式之 —  装饰器模式 代理器模式

    装饰器模式 概述 : 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活 维基百科解释 : 通过使用修饰模式,可以在运行时扩充一个类的功能.原理是 :增加一个修饰类包裹 ...

  6. GoF的23种设计模式之创建型模式的特点和分类

    创建型模式的主要关注点是"怎样创建对象?",它的主要特点是"将对象的创建与使用分离".这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关 ...

  7. Java经典23种设计模式之结构型模式(二)

    接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和 ...

  8. 23种设计模式之——责任链模式(okhttp 拦截器)

    前言 网络七层协议 在现实中的责任链模型之一就是网络连接.对与程序猿而言,七层或五层的网络连接模型是肯定知道的. 当一个网络请求发出时,需要经过应用层->传输层->网络层->连接层- ...

  9. 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解

    工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...

最新文章

  1. 09-dispatch_source
  2. 快速开发生命周期支持工具
  3. (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
  4. Java8 的 Stream 流式操作之王者归来
  5. fms安装教程 linux_FMS安装
  6. Android开发之Gradle多渠道打包总结
  7. 什么甜食可以代表你的家乡?
  8. SysLink UserGuide
  9. .NET 对接JAVA 使用Modulus,Exponent RSA 加密
  10. windows之无法选择默认打开方式
  11. VMware ESXi6.0注入8060阵列卡驱动过程记录
  12. 关于Facebook,Linkedin网的数据采集总结
  13. 董树义 近代微波测量技术_论文发表 | 基于微波雷达的1200米大跨悬索桥多点变形同步测量...
  14. 装Linux gpt还是mbr,装机、装系统必备:秒懂MBR和GPT分区表
  15. 算法为啥子那么难【转】
  16. 64位驱动 hp630打印机_hp1020打印机64位驱动下载
  17. Win10系统wifi图标消失无法联网怎么办
  18. 液晶显示屏的C语言编码,AMPIRE12864液晶C语言代码
  19. linux需要GPT初始化磁盘吗,PVE里面使用GPT初始化磁盘选项为灰色的解决办法
  20. 代理模式(静态代理模式、动态代理模式、cgLib代理模式、拦截器)

热门文章

  1. 使用LoadRunner-运行负载测试
  2. android 一个字符串分两行显示_重新梳理Android权限管理
  3. python中的ans是什么意思_python ans
  4. python学习-数据类型(布尔、空值)
  5. IntelliJ IDEA开发工具安装Scala插件使用
  6. Eclipse 的快捷键以及文档注释、多行注释的快捷键 一、多行注释快捷键
  7. could not find curses mysql_​-- Configuring incomplete-- Could NOT find Curses
  8. android java获取string.xml_android获取string.xml的值
  9. mysql查看表内容 很乱_mysql常用命令--15.10.14记录,内容有点乱
  10. android截图canvas为空,html2canvas截图空白问题的解决