命令模式-举例

  开关和电灯之间并不存在直接耦合关系,在命令模式中,发送者与接收者之间引入了新的命令对象,将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法。

命令模式的主要缺点如下:

使用命令模式可能会导致某些系统有过多的具体命令类。
因为针对每一个对请求接收者的调用操作都需要设计一个具体命令类。
因此在某些系统中可能需要提供大量具体命令类,
这将影响命令模式的使用。

使用场景
1.系统需要将请求调用者和请求接收者解耦,
使得调用者和接收者不直接交互。
请求调用者无须指定接收者的存在,也无须指定接收者是谁,接收者也无须关心合适被调用。

2.系统需要在不同的时间指定请求,将请求排队和执行请求。
一个命令的对象和请求的初始调用者可以有不同的生命期,换言之,最初的请求发出者
可能已经不在了,而命令对象本身仍然是活动的,可以通过该命令对象去调用
3.系统需要支持命令的撤销和恢复操作。

在上述代码中,功能键类FunctionButton充当请求的发送者,帮助文档处理类HelpHandler
充当请求的接收者,在发送者FunctionButton的onClick方法中将调用接收者HelpHandler
的display()方法,显然,如果使用上述代码,将给系统带来如下几个问题:
1.由于请求发送者和请求接收者之间存在方法的直接调用,耦合度很高,更换请求接收者
必须修改发送者的源代码。如果需要将请求接收者HelpHandler改为WindowsHandler,则
需要修改FunctionButton的源代码,违背了开闭原则。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android MVVM 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 ViewModel:负责业务逻辑 持有关系: 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具:DataBinding 执行流程:View &g…

视频监控EasyCVR如何通过设置sei接口,实现在webrtc视频流中添加画框和文字?

安防视频监控系统基于视频综合管理平台EasyCVR视频系统,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,具备权限管…

传奇私服教程,新手小白速速下载!

传奇私服教程,新手小白速速下载! 第二十课-封玩家账号登陆-封玩家机器码登陆.zip 第十九课-快速搭建FTP服务器教程配套工具.zip 第十八课-绿盟GOM1108引擎登陆器配置防劫持列表教... 第十七课-最新访问网站自动弹出加群教程.zip 修复沙城捐献不了或者捐献…

Flutter BottomSheet 拖动分两段展示

第一段 第二段 实现思路 通过 GestureDetector 的 Drag 方法,动态改变Dialog的高度,通过设置一个最大高度和最小高度分成两层进行展示 实现 常用的展示BottomSheet的方法为 showModalBottomSheet /// 设置最高最好以高度的比例进行设置,方…

FPGA设计时序约束十四、Set_External_Delay

一、序言 在时序约束中对clock的约束还存在一种特殊的延时约束set external delay。set external delay如字面含义,设置外部的时延值,但这个外部时延主要是指反馈时延,即信号从FPGA的output端口输出后经过外部电路回到输入端口的时延值。 二…

Linux:线程优先级设置

目录 一、背景二、调整普通线程的优先级通过系统命令通过Linux C代码 三、调整实时线程的优先级通过系统命令通过Linux C代码 四、参考资料(建议一定要阅读) 在操作系统中,线程优先级决定了线程在 CPU 调度时的重要性。较高优先级的线程会在竞…

服务器被黑了,记录一下

前两天刚开的新的服务,立马被黑,哈哈。有懂这个是什么黑组织吗,哈哈 All your data is backed up. You must pay 0.017 BTC to 1KdmpErgS3isFf8FrLaTfGHLQPKNsv839G In 48 hours, your data will be publicly disclosed and deleted. (more i…

STL——函数对象

目录 1.函数对象 1.1函数对象概念 1.2函数对象使用 2.谓词 2.1谓词概念 2.2一元谓词 2.3二元谓词 3.内建函数对象 3.1内建函数对象意义 3.2算数仿函数 3.3关系仿函数 3.4逻辑仿函数 1.函数对象 1.1函数对象概念 概念: 重载函数调用操作符的类&#x…

C_11微机原理练习题答案

一、单项选择题(本大题共 15 小题,每小题 3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。) .EXE 文件产生在(D)之后。A.汇编 B. 编辑 C.用软件转换 D.连接 2,十进制-61的8位二进制原码是(D)A. 00101111 B. 00111101 C. 10101111 D. 10111101 某机存储器…

GEE错误——‘xxx‘ did not match any bands.

这里我们在进行影像展示的时候会出现下面的错误,主要的原因是我们虽然进行了波段运算,但是依旧无法加载,主要原因是我们没有将计算过后的波段信息进行添加到我们的一个多波段影像,这里我们首先来看看代码出现的错误提示。当然这里只是给出了主要的问题,其实在进行波段运算…

Visual Basic入门指南(一)

Visual Basic入门指南 Visual Basic是一种由微软公司开发的简单、易学的编程语言。它被广泛应用于Windows应用程序的开发,并且有着强大的可视化编程能力。本文将介绍Visual Basic的基础知识和常用技巧,帮助读者快速入门。 环境准备 随便找一个软件安装…

Android系列-LayoutInflater 几个 inflate方法的区别

(来自chatgpt的回答) LayoutInflater 提供了多个 inflate 方法,用于将 XML 布局文件解析为相应的视图对象。这些方法的主要区别在于参数的组合和用途。以下是常见的几个 inflate 方法及其区别: 1.inflate(int resource, ViewGro…

java在线票务系统(选座)Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet 在线票务系统(选座)管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean(mvc模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要…

PowerShell Instal 一键部署TeamCity

前言 TeamCity 是一个通用的 CI/CD 软件平台,可实现灵活的工作流程、协作和开发实践。允许在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 系统支持 Centos7,8,9/Redhat7,8,9及复刻系列系统支持 Windows 10,11,2012,2016,2019,2022高版本建议使用9系列系统…

从0到1快速入门ETLCloud

一、ETLCloud的介绍 ETL是将业务系统的数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程,目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,为企…

CentOS7 系统安装

系统下载 官方下载 清华源下载 安装流程 1. 选择安装系统 2. 选择安装语言 3. 设置网络链接 4. 设置静态IP ![img](https://img-blog.csdnimg.cn/img_convert/53bfedd54b838f95bd8bcb2efa232e23.png)设置时区 5. 磁盘设置,无特殊需求默认就好 6. 安装模式选择 7…

安装驱动导致ubuntu开不了机

ubuntu系统,安装mmdeploy时想换nvidia驱动,换了之后按网上说的换cuda,重启后出问题,进不了系统,黑屏,闪烁之后也不出来字,出不来系统选择目录。 把主板上的纽扣电池拿下来放电,过几…

Spark应用程序的结构与驱动程序

Apache Spark是一个强大的分布式计算框架,用于处理大规模数据。了解Spark应用程序的结构和驱动程序是构建高效应用的关键。本文将深入探讨Spark应用程序的组成部分,以及如何编写一个Spark驱动程序来处理数据和执行计算。 Spark应用程序的结构 Spark应用…

LeetCode第53题 - 最大子序和

题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 解答 方案一: public int maxSubArray(int[] nums) {if (nums null || nums.length 0) {return 0;}int[] s…

cleanmymac这个软件怎么样?值不值得下载

cleanmymac是我必装的mac端清理软件,界面简洁好看,完美适配mac系统,文件清理的速度、精度都比较优秀,还是比较不错的呢。cleanmymac作为一款第三方清洁应用程序,具有专业完整的清理功能,包括释放内存、一键…