命令模式-举例

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

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

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

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

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

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

 

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

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

相关文章

[足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 课程链接 : https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch12 Robotic …

m3u8网络视频文件下载方法

在windows下,使用命令行cmd的命令下载m3u8视频文件并保存为mp4文件。 1.下载ffmpeg,访问FFmpeg官方网站:https://www.ffmpeg.org/进行下载 ffmpeg下载,安装,操作说明 https://blog.csdn.net/m0_53157282/article/det…

scanf函数返回值占位符详解,%*,%[]的应用

前言 scanf函数可以说是我们一开始就会接触的函数了,但在最近复习时我又找到而来一些之前不甚了解或是块要遗忘的知识,特作此篇。 一.返回值 我们之前提到了scanf返回值被忽略的问题: scanf函数返回值被忽略-CSDN博客 那么scanf的返回值…

PIC项目(9)——基于PIC16F877A的环境光照检测系统

1.课题背景 近年来,城市光污染问题逐渐显现。白天,玻璃幕墙、釉面砖墙、磨光大理石和各种涂料等装饰反射光线,明晃刺眼;夜晚,商场、酒店、超市楼顶的广告牌、电子屏、霓虹灯炫烂夺目。面对这样的光污染,人们…

关于Omlox定位标准(一)——omlox hub

关于Omlox定位标准 Omlox是世界上第一个开放的定位标准,旨在实现灵活的实时定位解决方案,,可以使用来自各个制造商的单元。“omlox"一词源自拉丁词汇"omni”(无处不在)和"locus"(位置…

使用element中el-cascader级联选择器动态懒加载以及回显 (单选)

<template><!-- 新增||修改弹框 --><el-dialog :close-on-click-modal"false" :close-on-press-escape"false" :title"title" :visible.sync"open"width"800px" append-to-body><el-form ref"for…

仓库申请报错:Cannot access gated repo for url https://huggingface.co/api

这个报错主要是使用huggingface里面的仓库的模型或其他文件需要提供访问权利&#xff0c; 1.需要有自己的huggingface账号&#xff08;没有则创建&#xff09; 2.右上角点进个人中心&#xff0c;然后找到Access Tokens&#xff0c; 3.设置新的或者Tokens&#xff0c;设置为读…

Linux之缓冲区的理解

目录 一、问题引入 二、缓冲区 1、什么是缓冲区 2、刷新策略 3、缓冲区由谁提供 4、重看问题 三、缓冲区的简单实现 一、问题引入 我们先来看看下面的代码&#xff1a;我们使用了C语言接口和系统调用接口来进行文件操作。在代码的最后&#xff0c;我们还使用fork函数创建…

牛客网面试题知识点记录-02

1.collection接口 2.在构造方法中调用方法A,若方法A被子类重写&#xff0c;则会先调用子类的方法A。举例如下题&#xff1a; 此时会输出null&#xff0c;调用顺序为&#xff1a;子类初始化&#xff0c;但是子类实现了Base&#xff0c;会先执行Base的构造方法&#xff0c;构造…

【C语言数组传参】规则详解

目录 数组传参介绍 数组传参规则 数组传参的实参 特殊情况一&#xff1a;sizeof&#xff08;数组名&#xff09; 特殊情况二&#xff1a;&数组名 数组传参的形参 数组传参使用数组名作为形参接收 形参如果是⼀维数组 形参如果是⼆维数组 数组传参使用指针作为形参…

登峰造极,师出造化,Pytorch人工智能AI图像增强框架ControlNet绘画实践,基于Python3.10

人工智能太疯狂&#xff0c;传统劳动力和内容创作平台被AI枪毙&#xff0c;弃尸尘埃。并非空穴来风&#xff0c;也不是危言耸听&#xff0c;人工智能AI图像增强框架ControlNet正在疯狂地改写绘画艺术的发展进程&#xff0c;你问我绘画行业未来的样子&#xff1f;我只好指着Cont…

nginx源码分析-3

这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。 在初始化http连接的函数ngx_http_init_connection中&#xff0c;nginx为http连接初始化了处理请求的回调函数&#xff0c;之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设…