GOF23设计模式之 命令模式command

C++设计模式_23_Command 命令模式 将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。----《设计模式》GoFCommand模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象语言中,常见的实现手段是“将行为抽象为对象”实现Command接口的具体命令对象ConcreteCommand有时候根据需要可能会保存一些额外的状态信息。通过使用Composite模式,可以将多个命封装为一个“复合命令”MacroCommand。 阅读详情

介绍

  • 命令模式:将一个请求封装成一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式。

结构

  • Command抽象命令类
  • ConcreteCommand具体命令类
  • Invoker调用者/请求者
    • 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命令类之间存在关联。在程序运行时,将调用命令对象的execute(),简介调用接受者的相关操作。
  • Receiver接收者
    • 接受者执行与请求相关的操作,具体实现对请求的业务处理
    • 未抽象前,实际执行操作内容的对象。
  • Client
    • 在客户类中需要创建调用者对象、具体命令类对象,在创建具体命令对象时指定对应的接收者。发送者和接收者之间没有直接关系,都通过命令对象间接调用。

开发中常见的场景

  • Struts2中,action的整个调用过程中就有命令模式
  • 数据库事务机制的底层实现
  • 命令的撤销和恢复

代码

  • Invoke
package com.coderbean.command;

/**
 * 调用者,发起者
 * Created by Chang on 15/10/4.
 */
public class Invoke {
    private Command command;    //也可以通过List来保存多条命令

    public Invoke(Command command) {
        this.command = command;
    }

    public void call(){
        System.out.println("Before Invoke.call");
        command.execute();
        System.out.println("After Invoke.call");
    }
}
  • Command
package com.coderbean.command;

/**
 * Created by Chang on 15/10/4.
 */
public interface Command {
    /**
     * 这个方法是一个返回为空的方法
     * 实际项目中,可以根据需求设计多个不同的方法
     */
    void execute();
}

class ConcreteCommand implements Command {
    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        System.out.println("Before ConcreteCommand.execute");
        receiver.action();
        System.out.println("After ConcreteCommand.execute");
    }
}
  • Receiver
package com.coderbean.command;

/**
 * 真正的命令执行者
 * Created by Chang on 15/10/4.
 */
public class Receiver {
    public void action(){
        System.out.println("Receiver.action");
    }
}
  • Client
package com.coderbean.command;

/**
 * Created by Chang on 15/10/4.
 */
public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoke invoke = new Invoke(command);

        invoke.call();

    }
}
全能扫描王的实现(python版本)- 目标检测图像矫正 全能扫描王python代码实现,可用于文件扫描或者是图像校正 阅读详情

相关推荐

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4648

Gof-命令模式

继续打卡设计模式 今天来聊一下的是命令模式 命令模式使得请求发送者与请求接受者消除彼此之间的耦合

木兮兮 403

Docker启动安装nacos(详情讲解,全网最细)

docker安装nacos保姆级教程

ilvjiale的博客 8万+

设计模式(十五)行为型:命令模式详解

命令模式(Command Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于将“请求”封装为一个独立的对象,从而使请求的发送者与接收者解耦,并支持请求的参数化、队列化、日志记录、撤销/重做等高级功能。

谦与谦寻的神隐 1157

PCIe网卡驱动实现分析(三)--- cache一致性

在现代处理器系统中,CPU的主频远高于主存读写速度,主存的读写速度成为程序执行效率的瓶颈;为了解决这个问题,在CPU和主存之间引入了Cache存储器,基于程序执行的局部性原理,在程序执行时,将正在使用的数据从主存拷贝一份到Cache,这样CPU就可以直接从Cache读写数据以改善主存读写速度慢的问题;

a935854743的博客 1776

SAP-ABAP:SAP MM采购订单增强核心BAdI:IF_EX_ME_PROCESS_PO_CUST 深度解析与最佳实践指南

SAP MM采购订单增强核心BAdI:IF_EX_ME_PROCESS_PO_CUST 关键摘要 核心要点 技术定位:SAP MM模块采购订单处理的核心增强框架,属于第二代BAdI技术,支持多实例并行实现 架构特点: 覆盖采购订单全生命周期(创建/修改/显示) 嵌入ME21N/ME22N/ME23N的标准处理流程 提供字段级、抬头、行项目、账户分配等多层次增强点 关键方法: INITIALIZE:事务初始化时预加载数据 PROCESS_HEADER:处理抬头数据变更 PROCESS_ITEM:处理行项目字段

baidu_35680696的博客 811

GoF总结-16(命令模式)

文章目录1. 概念2. 优点3. 缺点4. 结构与实现4.1 结构4.2 实现 1. 概念 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分隔开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 2. 优点 通过引入中间件(抽象接口)降低系统的耦合度。 扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足开闭原则。 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。 方便实现Undo和Red

星是河的眼的博客 874

面试提问:数据开发中如何通过指标拆解来指导SQL编写?(附拆解模板)

摘要:指标拆解是一种高效的数据分析方法,通过将复杂业务指标分解为可执行的原子指标,指导SQL查询的编写。核心步骤包括:明确指标定义、拆解原子指标、定位数据源、确定分组维度、构建中间表。文章提供了指标拆解模板和实际案例(如用户留存率计算),并总结了拆解带来的5大好处:逻辑清晰、易于调试、可复用、降低错误率、便于协作。最后强调"一定义、二拆解、三定位、四分步、五合并"的口诀,适用于数仓开发、BI报表等场景。

石榴姐yyds 266

GOF23设计模式之命令模式(Command)的理解与实现

 命令模式Command      命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排毒或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务Transaction模式   结构:      Command抽象命令类      ConcreteCommand具体命令类

不当初 1209

Qt实现窗口自适应分辨率大小

如果希望窗口大小始终保持与屏幕分辨率一致,可以将上述代码放在窗口的resizeEvent()函数中。这样,每当窗口大小发生变化时,都会自动调用resizeEvent()函数,从而实现窗口大小的自适应调整。在Qt中,可以通过一些简单的方法实现窗口大小随分辨率变化而自适应调整。获取到当前屏幕的分辨率后,可以根据需要调整窗口的大小。无论在何种分辨率下运行应用程序,窗口都能够正确地自动调整大小,提供更好的用户体验。除了调整窗口大小,还可以考虑将窗口设置为最大化,以充分利用屏幕空间。步骤2:调整窗口大小。

FuJavascript的博客 3654

华为od 面试八股文_C++_04_含答案

华为od 面试八股文_C++_04_含答案

MISAYAONE的博客 2472

GOF——命令模式

/** * 真正的命令执行者 */ class Receiver { public void action() { System.out.println("Receiver-->action"); } } interface Common { void execute(); } class ConcreteCommand implements...

weixin_38358430的博客 309

SAP MD81创建客户独立需求简介

正常我们用的最多的计划独立需求都是使用的是MD61 ,今天我们说下SAP的另外的一个标准功能客户独立需求MD81。虽然SAP给这个TCODE的描述是客户独立需求,但是实际是没有地方去关联对应的客户信息的。可以看到根据客户需求产生了对应的计划订单,我们创建的时候选择的KSV是按库存生产的,所以转换的时候生产订单也按单生产的。上面填写的这些字段的信息是不是和我们销售订单里面的字段的信息很相似。1)填写交货日期,可以选择按月 ,按日,按周等类型选择对应的日期。保存后会显示对应的客户独立需求的号码,如下图。

我小时候很黑的博客 2901

GOF23设计模式-行为型模式4-命令模式(Command)

命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为动作Action模式,事务Transaction模式。

Tumbler 241

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

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

GOF23设计模式之命令模式(command)

一、命令模式概述   将一个请求封装到一个对象,从而使得可用不同的请求对客户进行参数化。 二、命令模式结构   (1)Command 抽象命令类   (2)ConcreteCommand 具体命令类   (3)Invoker 调用者 / 请求者      请求的发送者,他通过命令对象来执行。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命令类之间存在关联,在程序运行...

dcpvpf6917的博客 296

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[导入]C#面向对象设计模式纵横谈(15):(行为型模式) Command 命令模式.zip(7.56 MB)...

讲座内容: 本培训课程探讨GoF23之 Command 命令模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。 课程讲师: 李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 .NET技术专家,C++/CLI 专栏作家。南京邮电学院毕业,历任程序员,高级程序员,开发主管。现为上海祝成科技软件架构师,高级培训讲师。译著Microsof...

weixin_30773135的博客 66

开炮——命令模式

命令模式 ​ Command Pattern:命令模式,是GoF23种设计模式中属于行为型模式的一种。 ​ 命令模式:将请求封装为一个对象,并传给调用对象。调用对象寻找可以处理该命令的合适的处理对象,并把该命令传给相应的处理对象执行命令。 ​ 命令模式的本质就是将发出请求和处理请求两者分开,一方只负责发出请求,另一方只负责处理请求。达到的目的就是将行为发起者和行为处理者两者解耦合。 结构 ​ 结...

小青的博客 488

实践GoF的23种设计模式:命令模式

命令模式可将请求转换为一个包含与请求相关的所有信息的对象, 它能将请求参数化、延迟执行、实现 Undo / Redo 操作等。

华为云官方博客 1474

23种设计模式 3 行为型模式 之3.7 command 命令模式

本文基本是搬运,搬运自网友k_eckel 的书籍《设计模式精讲-GoF 23种设计模式解析附C++实现源码》

刀法孜然的博客 822

GoF的23种设计模式速记

设计模式这东西平时也不怎么用,最近打算好好看一看这部分内容,但是GoF的23种设计模式在不熟悉的情况下,想要记住有点困难。所以想着自己画一个图,用于简单快速的记忆,同时也分享出来。让这些名词儿能在脑袋中有个印象,不时的可以回顾一下。这个图暂时还只是我自己从字面上的理解,并不反应实际的关系,如果朋友们有更好的建议可以给我留言,让朋友们贻笑大方了。 关于【创建型模式】 画了一个大工厂,左下角是一个...

crazygc的专栏 534

【Go实现】实践GoF的23种设计模式:命令模式

命令模式可将请求转换为一个包含与请求相关的所有信息的对象, 它能将请求参数化、延迟执行、实现 Undo / Redo 操作等

ruanrunxue的博客 849

Java23种设计模式(GOF)——命令模式

命令模式(command)结构案例开发常见场景 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式 结构 Command抽象命令类 ConcreteCommand具体命令类 Invoker调用者/请求者 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联。在程序运行时,将调用命令对象的execute(),间接调用接收

ozhi的博客 240

【C#设计模式】14.命令模式(Command Pattern)【行为型】

1.1 动机(Motivate) 在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合——比如需要对行为进行“记录、撤销/重做(undo/redo)、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。 1.2 意图(Intent) 将一个请求封装为一个对象,从而使你可用不同的请求对客户(客户程序,也是行为的请求者)进行参数化;对请求排队或记录请求日志,以及支持可撤销的操..

星Yeah 的博客 2558

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

GOF设计模式

设计模式的使用: 首先,设计模式有其应用的场合,不相宜的场合乱用设计模式有害无益;其次,设计模式主要解决对象之间相互通信、 相互依赖的结构关系。 在描述一个设计模式时,至少需要包含四个方面:模式名称(Pattern name)、问题(Problem)、解决方案(Solution)、效果(Consequence)。 设计模式要有自己的名称。 设计模式的目的就是解决问题。 ...

程序员杂谈 7757
上一篇: GOF23设计模式之 中介者模式Mediator
下一篇: GOF 23 设计模式之 解释器模式(Interpreter)与访问者模式(Visitor)
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值