十九、命令模式——将数据封装为对象,对象封装为命令

Frida实战:SSL Pinning绕过技术全解析 本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。 阅读详情


设计模式是面向问题、场景而总结产生的设计思路。是解决问题的套路。23 种经典的设计模式。它们又可以分为三大类:创建型、结构型、行为型。

行为型 包含了 观察者模式、模板模式、策略模式、职责链模式、状态模式、迭代器模式、 访问者模式、备忘录模式、命令模式、解释器模式、中介模式 总共11种模式。

命令模式

在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。将一组行为抽象为对象,可以实现二者之间的松耦合。通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。
该模式降低了系统耦合度,新的命令可以很容易添加到系统中去。

1. 将请求数据封装为对象

public class OrderService {
    private String name;
    private double amount;

    public OrderService(String name, double amount) {
        this.name = name;
        this.amount = amount;
    }

    public void sell(){
        System.out.println("sell product :"+name+" ,amount="+amount);
    }

    public void buy(){
        System.out.println("buy product :"+name+" ,amount="+amount);
    }
}

2. 将请求对象封装为命令

public interface Command {
    void execute();
}

public class BuyCommand implements Command{

    private OrderService service;

    public BuyCommand(OrderService service) {
        this.service = service;
    }

    @Override
    public void execute() {
        service.buy();
    }
}

public class SellCommand implements Command{

    private OrderService service;

    public SellCommand(OrderService service) {
        this.service = service;
    }

    @Override
    public void execute() {
        service.sell();
    }
}


3. 将请求放进队列

public class Broker {
    private LinkedList<Command> commands = new LinkedList<>();

    public void add(Command command) {
        commands.add(command);
    }

    public void runCommands(){
        while (!commands.isEmpty()) {
            Command c = commands.poll();
            c.execute();
        }
    }
}

4. 组合运行

public class Main {
    public static void main(String[] args) {
        Command c1 = new BuyCommand(new OrderService("trousers",20));
        Command c2 = new BuyCommand(new OrderService("desses",10));

        Broker broker = new Broker();
        broker.add(c1);
        broker.add(c2);
        broker.runCommands();
    }
}

运行结果:

buy product :trousers ,amount=20.0
buy product :desses ,amount=10.0

总结

命令模式的主要作用和应用场景,是用来控制命令的执行,比如,异步、延迟、排队执行命令、撤销重做命令、存储命令、给命令记录日志等等。

设计模式系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/designpattern
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。

恒玄BES调试笔记-BES2500如何Dump Anc Audio数据 从YP的4M flash改HP3的2M flash只需要改: 原工程:target.mk的export FLASH_SIZE ?= 0x200000和common.mk里的KBUILD_CPPFLAGS += -DNEW_IMAGE_FLASH_OFFSET=0x100000 OTA工程:target.mk的NEW_IMAGE_FLASH_OFFSET ?= 0x100000和FLASH_SIZE ?= 0x200000 ... 阅读详情

相关推荐

微信小程序使用ucharts折线图,有负数显示0刻度线

当数据有负数和正数的时候默认不会显示0刻度线,不方便看出正负对比。

欢迎来到我的博客!在这里,我将分享我在前端开发方面的知识和经验。让我们一起探索前端开发的无限可能! 1581

对象的封装

运行之后如下所示:我们程序设计追求“高内聚,低耦合”高内聚:类的内部数据操作细节自己完成,不允许外部干涉低耦合:仅对外暴露少量的方法用于使用。

超级程序诞生的博客 1284

Isograph Reliability Workbench 14实战:从零构建故障树分析模型

本文以“马达不转”为例,手把手教你使用Isograph Reliability Workbench 14从零构建故障树分析模型。内容涵盖创建工程、定义顶事件、添加逻辑门与基础事件等核心步骤,并介绍了模型检查与定性定量分析,帮助你系统掌握这一强大的可靠性工程工具。

weixin_29309213的博客 360

java怎么把数据封装成对象_将行数据转换成Java(POJO)对象

工作中经常会遇到将行数据转换成Java(POJO)对象的场景,其中关于字段校验和类型转换的处理繁琐而冗余,对于有代码洁癖的人着实不能忍。这里分享下自己封装的工具代码,也许能够帮助你更简单地完成此类任务。先将以下五个文件加入你豪华午餐(项目????)中FieldItem:/****@authorlichmama**/public classFieldItem {public intgetIndex() {...

weixin_32226023的博客 1835

STM32F103串口接收中断:USART_IT_IDLE和USART_IT_RXNE区别

2:如果是大于1个byte的数据,在不用DMA的情况下,同时使能USART_IT_RXNE,USART_IT_IDLE中断,每收到一个字节在中断中把数据存到缓存中,待收到USART_IT_IDLE中断时,收完整帧数据,然后再解析处理数据。比如:如上图在初始化时,同时开启了两个中断,如果传送8个字节的数据,就会产生8个USART_IT_RXNE,和1个USART_IT_IDLE中断。(如果接收到数据,在1个byte的时间内,没有收到新数据,就认为是数据传送完成,产生空闲USART_IT_IDLE中断)

weixin_66299220的博客 2401

2万字长文:海豚调度器(DolphinScheduler)面试题深入了解

DAG图(有向无环图)是海豚调度器中表示工作流任务依赖关系的一种方式。在DolphinScheduler中,每个任务是一个节点,任务之间的依赖关系通过有向边连接这些节点来表示。无环:保证了工作流的执行顺序是确定的,避免了无限循环的问题。有向:箭头指示了任务的执行方向,即上一个任务的输出可以作为下一个任务的输入。依赖表示:通过图形化界面,用户可以通过拖拽连接线来定义任务之间的先后顺序和依赖关系。并行处理:DAG图可以表示出任务的并行关系,允许多个任务在没有直接依赖关系的情况下同时执行。条件分支。

大模型大数据攻城狮的专栏 1330

2.Eclipse+SSM+根据数据库进行对象封装

使用MySQL创建数据库 create database peopleinfo go use peopleinfo go --创建主表user create table userinfo( uid int primary key identity(1,1),--登录人id name varchar(32) not null,--登记人账号 pwd varchar(20) not null--登录人密码 ) go --创建从表 create table Person( pid int primary

YKYZSYA的博客 291

移花接木,玩转CANoe的几种扩展接口应用(五)——串口设备

近期看到粉丝朋友在CANoe自动化测试方面的关注度很大,今天就围绕这个做一个专题,总结一下以往项目上用过的几种CANoe扩展接口,分享出来希望对相关领域的网友有所帮助。本文是该专题的第五篇文章,主要讲解了串口设备的功能配置、连接方法、配置方法、调用方法,最后分析了这种扩展借口应用的特点和适用场景。

Mr.Cssust的博客 2369

java怎么把数据封进对象里_将数据库的数据封装成对象-java

由于调用hibernate封装对象,会自动调用联级查询。而我需要用一个左联接sql来减少访问数据库的耗时,所以我自己封装数据成对象。public List findByClassld(Integer classId,int startIndex,int size) throws ParseException{if(classId != null&&classId != 0){Lon...

weixin_39616855的博客 1084

多模态目标检测综述介绍及框架提供

多模态目标检测是计算机视觉领域的前沿方向,旨在通过融合不同传感器或数据源的信息(如可见光、红外、深度等),提升复杂场景下目标检测的准确性和鲁棒性。

Limiiiing的博客 4588

工艺边与定位孔设计经验规则总结

工艺边是在SMT焊接时,为了PCB和导轨接触预留的PCB边。工艺边和PCB的接触部分一般需要开槽,或者使用邮票孔,以方便后期去除工艺边。

fydar的博客 1985

学习记录353@将前端传入的数据封装为对象的两种方法

前端传入数据,后端接收数据,并封装为指定的JavaBean对象,主要有两种方式 方式一 前端以参数–值的方式传递数据,后端使用BeanUtils进行装配 JavaBean package com.qianfeng.business.vo; import lombok.Data; import java.io.Serializable; @Data public class RoleVo implements Serializable { private String roleName;.

教练我想学编程 3076

Android应用发布到Google Play的步骤和注意事项

发布Android应用到Google Play是将您的应用分享给全球用户的重要步骤。Google Play是Android平台上最大的应用分发渠道之一,使得开发者可以轻松将他们的应用推广到数百万的用户。在本篇博客中,我们将逐步介绍如何将您的Android应用发布到Google Play,同时提供详细的步骤和注意事项,以及相关的代码示例。

2201_76125261的博客 850

十九、命令模式 ( Command Pattern )

命令模式是行为型模式,一种数据驱动的设计模式

qq_25843323的博客 602

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【设计模式】行为型模式—命令模式(Command Pattern)(十九)

**命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作。首先请求的一方发出请求要求执行一个操作,然后接收的一方收到请求,并执行操作。** - 命令模式**解耦了`请求方`和`接收方`**,请求方只需要发送命令而不需要关心命令是如何被接收的,不关心命令怎么操作,也不关心命令是否被执行等。 - **核心思想**:将命令或者请求封装成对象,`通过一个中间层来解耦请求调用者和请求最终执行者` - **`命令模式的使用场景有限了解思想即可`**

墩墩分墩 518

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式:十九.命令模式

命令模式(Command Mode):是一种数据驱动的设计模式,它属于行为型模式。将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。把一个复杂的操作封装成一个命令,由命令去操作。 命令模式由四部分组成: 1.抽象命令(Command):定义命令的接口,声明执行的方法。 2.具体命令(Concr...

q493201681的博客 215

【白话设计模式八】命令模式(Command)

为什么80%的码农都做不了架构师?>>> ...

weixin_34357436的博客 224

23种设计模式(二十二)行为变化之命令模式

文章目录动机模式定义要点总结   在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。”行为变化“模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。 动机   在软件构建过程中”行为请求者“与”行为实现责“通常呈现一种”紧耦合“。但在某些场合–比如需要对行为进行”记录“、撤销/重(undo/redo)、事务等处理,这种无法抵御变化的紧耦合是不合适的。   在这种情况下,如何将”行为请求者“与”行为实现者“解耦?将一组行为抽象为对对象,可以实现二者之间的松耦合。 模式

小小何先生的学习之旅 595

23种设计模式(十九)数据结构之组合模式

文章目录数据结构模式动机模式定义代码要点总结 数据结构模式   常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。 动机   软件在某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。 模式定义   将对象组合成树形结构以表示”部分

小小何先生的学习之旅 446

【设计模式 13】命令:覆水能收

摘要: 林衍因错误情报做出全线降价决策,导致集团损失19亿。事后,他提出将重大决策封装为可撤销的指令,包含执行、撤销和记录功能,类似程序设计中的命令模式。这一机制允许决策按步骤回滚,避免不可逆损失。通过将决策对象化(如定价指令),实现排队、存储与撤销功能,确保商业决策具备退路。正如兵法所言"先为不可胜",命令模式为企业提供了容错能力,使错误决策可及时修正。

qq_34733864的博客 789

Java设计模式解析之十九——备忘录模式

迭代器模式1.前言2.特点 1.前言 常用设计模式共有23种,根据目的准则分类,分为三类 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 这里介绍一下备忘录模式。 2.特点 ...

fanhenghao的博客 216

23种设计模式(十)对象创建之构建器

文章目录模式定义要点总结   在软件系统中,有时候面临着“一个复杂对象”的创建工作,其 通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 class House{ //.... }; class HouseBuilder { public: House* GetResult(){ return pHouse; } virtual ~HouseBuilder(){} pr

小小何先生的学习之旅 537

设计模式(一)面向对象设计原则

  了解面向对象继承机制(封装、继承、多态)并不代表把握面向对象机制所带来的抽象意义。 class Point { public: int x; int y; }; class Line { public: Point start; Point end; Line(const Point& start, const Point& end) { this->start = start; this->end = end; }; }; ...

小小何先生的学习之旅 715

读《深入 PHP 面向对象、模式与实践》

包了书皮,在网上找了一个图。一,介绍二,PHP与对象三,对象基础类中的属性使用方法参数和类型继承四,高级特性静态方法和属性常量属性抽象类接口错误处理Final 类和方法使用拦截器析构方法复制对象回调,匿名函数和闭包析构方法__construct(),实例化对象时,自动调用。__destruct(),对象在被垃圾收集器收集前自动调用。五,对象工具包命名空间Object::method(); //访问...

程序员写的技术 FAQ 和杂文 393

设计模式系列(十九)备忘录模式

参考: https://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html https://blog.youkuaiyun.com/niunai112/article/details/79990158 https://www.cnblogs.com/geek6/p/3951677.html 一:基本理论 备忘录模式又叫做快照模式(...

perfectnihil的博客 149

23种设计模式(七)对象创建之工厂方法

文章目录动机设计方法一设计方法二模式定义要点总结   通过“对象创建” 模式绕开new,来避免对象创建(new)过程 中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它 是接口抽象之后的第一步工作。 动机   在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 设计方法一 FileSplitter1.cpp class ISplitter{ public: virtual void split()=0; virtual ~ISplitter

小小何先生的学习之旅 356

23种设计模式(十八)状态变化之备忘录

文章目录动机模式定义要点总结 动机   在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。 模式定义   在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 class Memento { string state; //.. public: Memento(const string

小小何先生的学习之旅 475
上一篇: 十八、备忘录模式——SL大法,读档的实现
下一篇: 二十、中介模式——由网状关系变为星形关系
悟空学编程
博客等级 码龄12年 32粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值