设计模式学习——命令模式

电源完整性分析:PDN阻抗与去耦电容设计——目标阻抗计算与电容选型深度实战 摘要:随着嵌入式处理器主频突破 GHz、多核架构普及,电源完整性(Power Integrity, PI)已成为高速 PCB 设计中不可忽视的关键环节。本文从 PDN(电源分配网络)阻抗模型出发,系统讲解目标阻抗计算方法、去耦电容选型策略、反谐振抑制技术,并结合 STM32F4 核心板的完整设计实例,提供一套可落地的电源完整性工程实践方案。电源完整性设计是一项系统工程,需要从目标阻抗计算电容选型反谐振抑制PCB 布局目标阻抗是设计的起点,由电源电压、纹波要求和瞬态电流决定去耦电容。 阅读详情



基本介绍

  1. 命令模式:在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求得接收者是谁,也不知道被请求得操作是哪个。
    我们只需要在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。
  2. 命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。
  3. 在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。

原理类图

在这里插入图片描述
说明(命令模式的角色及职责)

  1. Invoker 是调用者角色
  2. Command:是命令角色,需要执行的所有命令都在这里,可以是接口或抽象类
  3. Receiver:接收者角色,知道如何实施和执行一个请求相关的操作。
  4. ConcreteCommand:聚合一个接收者对象与命令动作,调用接收者相应的操作,实现execute

命令模式的类图实例

在这里插入图片描述

命令模式的代码实例

Command 充当命令角色

//创建命令接口
public interface Command {
    // 执行动作(操作)
    public void excute();
    // 撤销动作(操作)
    public void undo();
}

LightOffCommand 充当 “ConcreteCommand”,聚合接收者的命令动作(LightReceiver )

public class LightOffCommand implements Command {

    //聚合LightReceiver
    LightReceiver light;

    //构造器
    public LightOffCommand(LightReceiver light) {
        super();
        this.light = light;
    }

    @Override
    public void excute() {
        //调用接收者的方法
        light.off();
    }

    @Override
    public void undo() {
        //调用接收者的方法
        light.on();
    }
}

LightOnCommand 充当 “ConcreteCommand”,聚合接收者的命令动作(LightReceiver )

public class LightOnCommand implements Command {

    //聚合LightReceiver
    LightReceiver light;

    //构造器
    public LightOnCommand(LightReceiver light) {
        super();
        this.light = light;
    }

    @Override
    public void excute() {
        //调用接收者的方法
        light.on();
    }

    @Override
    public void undo() {
        //调用接收者的方法
        light.off();
    }
}

作为一个接收者,实施和执行一个请求相关的操作

public class LightReceiver {

    public void on(){
        System.out.println("电灯打开了.. ");
    }

    public void off(){
        System.out.println("电灯关闭了.. ");
    }
}
/**
 * 没有任何命令,即空执行:用于初始化每个按钮,当调用空命令时,对象什么都不做
 * 其实,这也是一种设计模式,可以省掉对空判断
 */
public class NoCommand implements Command{
    @Override
    public void excute() {

    }

    @Override
    public void undo() {

    }
}
public class RemoteController {

    //开按钮的命令数组
    Command[] onCommands;
    Command[] offCommands;

    //执行撤销的命令
    Command undoCommand;

    //构造器,完成对按钮初始化
    public RemoteController() {
        onCommands = new Command[5];
        offCommands = new Command[5];

        for (int i = 0; i < 5; i++) {
            onCommands[i] = new NoCommand();
            offCommands[i] = new NoCommand();
        }
    }

    //给我们的按钮设置你需要的命令
    public void setCommand(int no, Command onCommand, Command offCommand) {
        onCommands[no] = onCommand;
        offCommands[no] = offCommand;
    }

    //按下开按钮
    public void onButtonWasPushed(int no) {
        //找到你按下的开的摁钮,并调用对应的方法
        onCommands[no].excute();
        //记录这次的操作,用于撤销。
        undoCommand = onCommands[no];
    }

    //按下关按钮
    public void offButtonWasPushed(int no) {
        //找到你按下的关的摁钮,并调用对应的方法
        offCommands[no].excute();
        //记录这次的操作,用于撤销。
        undoCommand = offCommands[no];
    }

    //按下撤销按钮
    public void undoButtonWasPushed() {
        undoCommand.undo();
    }
}

命令模式在Spring框架JdbcTemplate应用的源码分析

首先打开spring框架中JdbcTemplate类的源码

在这里插入图片描述
在该类中找到query()方法进行分析

在这里插入图片描述

命令模式的注意事项和细节

  1. 将发起请求的对象与执行请求的对象解耦。发起请求的对象是调用者,调用者只要调用命令的execute()方法既可以让接收者工作,而不必知道具体的接收者对象是谁、是如何实现的,命令对象会负责让接收者执行请求的动作,也就是说:“请求发起者”和“请求执行者”之间的解耦是通过命令对象实现的,命令对象起到了纽带桥梁的作用。
  2. 容易设计一个命令队列。只要把命令对象放到队列,就可以多线程的执行命令。
  3. 容易实现对请求的撤销和重做
  4. 命令模式不足:可能导致某些系统有过多的具体命令类,增加了系统的复杂度,这点在使用的时候要注意。
  5. 空命令也是一种设计模式,它为我们省去了判空的操作。
  6. 命令模式的经典应用场景,界面的一个按钮都是一条命令、模拟CMD(DOS命令)订单的撤销/恢复、触发-反馈机制。
数据集FFHQ和LSUN介绍【包含FFHQ1024,515,256,128分辨率图像获取方法】 FFHQ全称Flickr-Faces-High-Quality(Flickr-Faces-HQ),最初是作为生成式对抗网络(GAN)的基准创建的,也用于StyleGAN的训练数据集中,并由英伟达于2019年开源。CVPR_2019Flickr-Faces-HQ (FFHQ)其由 70,000 张分辨率为 1024×1024 的高质量 PNG 图像组成,在年龄、种族和图像背景方面包含相当大的差异。它对眼镜、太阳镜、帽子等配饰也有很好的覆盖。 阅读详情

相关推荐

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1874

认真学习设计模式之命令模式(Command Pattern)

【1】命令模式 命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令模式又称为行动(Action)模式或交易(Transaction)模式。 命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求...

小小默:进无止境 1228

配置oem 13c以监控管理数据库

使用oem13c监控数据库

雅冰石的专栏 1811

设计模式学习--命令模式(Command Pattern)

设计模式学习--命令模式(Command Pattern) 2013年6月18日  设计模式学习记录 题外话:不知道同志们,怎么看待设计模式这个东西的,以小巫现在的水平,还不能把设计模式能运用到实际开发当中去,自己面向oo的设计思想还不够成熟,我知道设计模式是个好东西,只要能运用好就可以发挥很大的作用,但运用不好也会给项目带来麻烦,增加了复杂性。小巫觉得,刚学习设计模式的时候不应该

巫山老妖 3393

从零到一:AIGC+Unity3D打造动态天空盒的实战指南

本文详细介绍了如何利用AIGC技术结合Unity3D打造动态天空盒的实战指南。通过AIGC生成360全景图,再集成到Unity3D中,实现高效、多样化的天空盒效果。文章涵盖了从AIGC全景图生成、工作流搭建到Unity场景集成的完整流程,并提供了代码示例和优化建议,帮助开发者快速掌握这一技术。

weixin_29021291的博客 603

LSF0108 level shift设计使用及debug流程

目录 初版设计 测试出现的问题1 解决问题(尝试1) 测试出现的问题2 解决问题2-1 解决问题2-2 单Port测试结果 所有Port均连接测试结果 初版设计 此电路的应用场景在于将LCD屏幕连接到FPGA上,进而通过FPGA中设计的硬件电路来驱动LCD屏幕,验证数字硬件电路设计的正确性。因此需要一个转接板位于FPGA和LCD屏幕之间,将二者连接起来。 转接板的硬件电路设计主要存在以下需求: 实现3.3V和1.8V之间的同时双向逻辑转换(LCD屏幕电平为3.3V,FPGA电平为1.

moshanghongfeng的博客 7562

HeadFirst 设计模式学习笔记6--命令模式

本文已搬家至【HeadFirst 设计模式学习笔记】6 命令模式

gnuhpc的专栏 3552

python-snap7 报错:can‘t find snap7 library. If installed, try running ldconfig

1、使用场景: Python 读取西门子 S7 系列 PLC 信息,会用到 snap7 库,网上也有很多案例。但是,运行时会报错:can't find snap7 library. If installed, try running ldconfig 2、解决方案: A、下载项目需要依赖的 dll、lib 文件: i、Sourceforge下载:https://sourceforge.net/projects/snap7/files/ ii、优快云下载(免费):https://dow.

蜡笔小新历险记的博客 3649

《游戏设计模式》学习笔记(二)命令模式 Command Pattern

采用命令模式后,我们将jump,fire这些方法做成一个抽象类command的子类,这样每个命令就有了面向对象的形式的封装(将命令变为数据对象,让这个对象和其他对象一样可以被存储和传递)2.对于不同的游戏角色,我们因为会往里边传入不同actor的引用,最后调用的是actor中内置的方法(如jump方法),这就实现了不同的角色拥有不同的按键行为。1.对于不同的按键,由于其类型都是command*,我们只需要让这个指针指向不同的子类命令对象,就可以实现按键配置功能了。这个时候我们就需要考虑使用命令模式了。

Currybeefer的博客 2238

Matlab之fdesign的应用说明

fdesign 是 MATLAB 中用于数字滤波器设计的工具(属于),它提供了一种系统化的方式来定义滤波器参数并生成相应的滤波器。指定滤波器的频率、幅度等参数。例如,设计一个低通滤波器:Fs = 1000;% 采样率 (Hz)% 通带截止频率% 阻带截止频率Apass = 1;% 通带衰减 (dB)Astop = 60;% 阻带衰减 (dB)

嵌入式老牛的博客 1052

YOLOv11涨点改进| Kimi团队 2026 |独家创新首发、注意力改进篇|爆火AttnRes残差自注意力模块,含多种创新改进,借助残差思想,缓解细节信息在传播过程中被稀释,促进YOLOv11涨点

🔥本文提出AttnRes残差自注意力模块,通过深度维度的注意力加权机制替代传统固定残差累加方式,使YOLOv11网络能自适应选择更有价值的历史层特征进行聚合。该方法缓解了浅层细节信息在深层传播过程中被稀释的问题,有效融合浅层纹理与深层语义特征,提升小目标、密集目标和复杂场景的检测能力。AttnRes还改善了深层网络的梯度分布与训练稳定性,增强模型收敛质量和泛化能力。实验表明,该模块能以较小计算开销显著提升YOLOv11的特征表达能力、检测精度和整体鲁棒性。文中详细介绍了模块结构、实现原理、优势特点

Ai缝合怪、助力小伙伴高效发论文 125

尚硅谷设计模式学习(15)---[命令模式(Command Pattern)]

尚硅谷传送门==>B站尚硅谷Java设计模式 ❤❤❤感谢尚硅谷❤❤❤ 最近开始计划学习一下设计模式了,加油!!! 目录命令模式 先看一个案例 买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,只要在手机上安装app就可以控制对这些家电工作。这些智能家电来自不同的厂家,但是不想针对每一种家电都安装一个App,分别控制,希望只要一个app就可以控制全部智能家电。 看起来像是外观模式,但是又不一样,外观模式中是加一层接口后,在接口中定义几个方法;可以直接操控流程. 这里要实现一个app控制所有智能

从零开始的异世界JAVA学习 309

C#上位机之海康相机开发(SDK)实战教程

SDK的接口设计遵循“句柄-操作-释放”模式,掌握→→→的流程,就能完成基础开发;工业场景需重点关注稳定性:断连重连、内存管理、抗干扰(网口相机的IP设置、触发信号的可靠性);进阶功能(如图像处理、多相机同步)需结合视觉库(EmguCV)和硬件特性(GPIO触发),但前提是保证基础采集的稳定。建议新手先跑通SDK自带的C#示例,理解每个函数的作用,再逐步替换为自己的代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2193

学习设计模式-命令模式(Command Pattern)

命令模式 定义 命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式支持可撤销的操作。 类图

提莫达达的博客 225

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JAVA设计模式学习笔记6——命令模式(Command Pattern)

命令模式(Command Pattern)——将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持科撤销的操作。     命令模式适用于“请求-响应”模式的功能,将用户的请求封装成对象(命令),用户需要执行什么样的操作,就调用什么样的命令,而无需知道命令的执行逻辑是什么。     命令模式主要包含以下几个概念: 1、Command:所有命令的抽象类,一般需...

why 423

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

学习设计模式《十二》——命令模式

命令模式的本质是【封装请求】

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1684

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式学习--16.命令模式(Command Pattern)

package com.designepattern.commandpattern; /** * @Date:2020/12/2 * @Content: */ public class MainDemo { public static void main(String[] args) { Command cmd=new CommandImpl(); Invoker inv=new Invoker(cmd); inv.exec(); ...

u010031813的博客 152

23种设计模式学习记录之命令模式

想说的话: 在大学的时候曾经学过这23种设计模式,但是那时没啥编程经验,糊里糊涂过了一遍,没多久就忘记了,工作之后将精力主要集中在学习新技术上,比如springboot,cloud,docker,vue。毕业两年后去面试,发现设计模式还是java程序员需要迈过的一道坎,面试的时候问到代理模式和适配器模式有什么区别,你在工作中用到了什么设计模式,怎么用的?答不上来的特别尴尬,所以决定重新学习这几种设计模式,争取在工作中使用上。 本文所有案例代码 码云:https://gitee.com/helloworld6

lx9876lx的博客 288

Java学习-设计模式-命令模式

Java学习-设计模式-命令模式 概述: 命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。 **缺点:**使用命令模式可能会导致某些系统有过多的具体命令类。 **使用场景:**认为是命令的地方都可...

xxydzyr的博客 187

设计模式学习笔记--命令模式command pattern(Java版)

一、实质 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志以及支持可撤销的操作,也称之为动作ACtion模式、事物transaction模式。 二、结构 Command抽象命令类 ConcreteCommand具体命令类 Invoke调用者/请求者 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽

吃果冻不吐果冻皮 1280

学习笔记【23种设计模式-第十四节:Command Pattern 命令模式】

Command Pattern 命令模式 简述 命令模式,在软件设计中,我们经常需要向欧协对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计 命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。 在明明模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。 通俗易懂的理解:将军发布命令,士兵去执行。其中有几个

qq_53273362的博客 157

java设计模式学习之【命令模式】

这篇教程不仅提供了命令模式的理论基础,还通过具体的Java代码示例展示了如何实现和应用这种模式。简单理解,通俗易懂

qq_33129875的博客 1355

学习设计模式之命令模式

文章目录一、定义二、问题背景三、违背设计模式的设计实现1. 工程结构2. 代码实现四、问题改进1. 工程结构2. 代码实现3. 测试验证五、总结 一、定义 命令模式在我们通常的互联网开发中相对来说用的比较少,但这样的模式在我们的日常中却经常使用到,那就是Ctrl+C、Ctrl+V。当然如果你开发过一些桌面应用,也会感受到这样设计模式的应用场景。从这样的模式感受上,可以想到这是把逻辑实现与操作请求进行分离,降低耦合方便扩展。 命令模式是行为模式中的一种,以数据驱动的方式将命令对象,可以使用构造函数的方式传递

南淮北安的博客 543

设计模式学习笔记——命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为...

Stephen 394

《Java设计模式学习》命令模式

命令模式(Command Pattern)是一种行为设计模式,它将请求封装成对象,从而允许您使用不同的请求、队列或日志请求来参数化其他对象。命令模式还支持撤销操作。在命令模式中,有四个主要的角色:命令接口、具体命令、命令发送者和命令接收者。其中,命令接口定义了执行请求的方法,具体命令实现了命令接口,并包含了执行命令所需要的所有信息,命令发送者负责创建具体命令并将其发送给命令接收者执行,命令接收者则负责执行具体命令。命令模式可以帮助我们将请求封装成对象,从而使得我们可以更加灵活地处理请求。

一个不断前行的程序者 258
上一篇: 设计模式学习——模板方法模式
下一篇: 设计模式学习——访问者模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值