Java设计模式-命令模式

Java设计模式之命令模式(Command Pattern) 命令模式通过将操作封装为对象,实现了请求发送者与接收者的解耦,适用于需要支持撤销、事务、批量操作等复杂场景。,它将请求封装为独立的对象,使得不同请求的调用、队列化、日志记录或撤销操作成为可能。该模式通过解耦请求的发送者与接收者,增强系统的灵活性和扩展性。:将请求转换为包含所有请求信息的独立对象(命令),支持参数化、延迟执行、撤销/重做等功能。:按钮点击事件绑定命令对象,支持撤销(如Photoshop的“撤销上一步”)。:数据库事务的提交与回滚可视为命令模式的应用。支持命令的队列、日志、撤销/重做。 阅读详情

1.首先什么是命令模式

将一个请求封装成对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。(设计模式之禅)

2.命令模式应该都有哪些属性

1.Receiver命令接收者
2.command命令,
3.invoker执行者

3.实践

3.1餐厅的点菜系统,顾客点菜便是一条命令,服务员为接收者,并将命令传递到厨师处,让厨师执行。餐厅并不只是只有一个菜品,故而应该每个菜品都是一条命令,而服务员手上的单应该是一个命令的集合,也实现命令接口,拥有可执行的属性。

3.2类图设计
没完接下

这里写图片描述

3.2编码实现

//命令接口
import com.design.cookApi.CookApi;

public interface Command {
    public void execute();
    public void setCookApi(CookApi cookApi);
    public int getTableNum();
}
//具体命令实现
public class DuckCommand implements Command {
        //桌号
        private int tableNum;
        //持有做菜厨师的引用
        private CookApi cookApi = null;

        public DuckCommand(int num) {
            // TODO Auto-generated constructor stub
            this.tableNum = num;
        }

        public int getTableNum() {
            return tableNum;
        }

        public void execute() {
            this.cookApi.cook(tableNum, "北京烤鸭");
        }

        @Override
        public void setCookApi(CookApi cookApi) {

            this.cookApi = cookApi;
        }
}

//服务员的菜单,命令的集合
public class MenuCommand implements Command {

    //记录多条菜品
    public Collection<Command> col = new ArrayList<Command>();

    public void addCommand(Command cmd) {
        col.add(cmd);
    }

    public int getTableNum() {
        return 0;

    }

    public Collection<Command> getCommands() {
        return this.col;
    }

    public void execute() {
        //传递到命令队列,厨师在这里取出命令执行
        CommandQueue.addMenu(this);
    }

    @Override
    public void setCookApi(CookApi cookApi) {


    }

}
//命令接收者
public class Waiter {
    private MenuCommand menuCommand = new MenuCommand();

    public void orderDish(Command cmd) {
        menuCommand.addCommand(cmd);
    }

    public void orderOver() {
        this.menuCommand.execute();
    }
}
//厨师  命令执行者
//多个厨师炒菜,应该是并发的
public class HotCook implements CookApi,Runnable{
    public String name;

    public HotCook(String name)
    {
        this.name = name;
    }

    public void cook(int tableNum, String name) {
        int cookTime = (int)(20 * Math.random());
        System.out.println(this.name+"厨师正在为"+tableNum+"号桌做"+name);
        try
        {
            Thread.sleep(cookTime);
        }catch(InterruptedException e)
        {
            e.printStackTrace();
        }
        System.out.println(this.name+"厨师为"+tableNum+"号桌做好了:"+name+",共耗时:"+cookTime);


    }

    public void run() {

        while(true)
        {
            Command cmd = CommandQueue.getOneCommand();
            if(null != cmd)
            {
                cmd.setCookApi(this);
                cmd.execute();
            }

            try 
            {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}
//厨师接口
public interface CookApi {
    public void cook(int tableNum, String name);
}

//命令队列
public class CommandQueue {
    //用来存储命令对象的队列
    private static List<Command> cmds = new ArrayList<Command>();

    public synchronized static void addMenu(MenuCommand menu) {

        for (Command item : menu.getCommands()) {
            cmds.add(item);
        }
    }

    public synchronized static Command getOneCommand() {

        Command cmd = null;
        if(cmds.size()>0)
        {
            cmd = cmds.get(0);
            cmds.remove(0);
        }
        return cmd;
    }
}
【Java设计模式】Java设计模式之(六)命令模式(Command Pattern) 本文目录 一、命令模式介绍 二、代码实现 2.1 通用类图 2.2 代码实现 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 一、命令模式介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤 阅读详情

相关推荐

Java设计模式之命令模式(Command模式)介绍

主要介绍了Java设计模式之命令模式(Command模式)介绍,本文讲解了Command模式的定义、如何使用命令模式等内容,需要的朋友可以参考下

JAVA设计模式--命令模式

命令 (Command) 模式又叫作动作 (Action) 模式或事务 (Transaction) 模式,是一种对象的行为模式。将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。命令模式的本质:封装请求设计意图:命令模式通过将请求封装到一个命令 (Command) 对象中,实现了请求调用者和具体实现者之间的解耦。命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

贵公子丶笔记 1377

详解Java设计模式——命令模式

主要介绍了Java设计模式——命令模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

JAVA设计模式之命令模式

文章目录一、命令模式简介二、命令模式结构三、命令模式的角色与职责四、命令模式的具体实现1、不使用命令模式2、使用命令模式五、命令模式的应用场景要抱抱才会开心啊~~~~~~~~~~~~ 一、命令模式简介 Command模式也叫命令模式 ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。 二、命令模式结构 三、命令模式的角色与职责 四、命令模...

双子座的独居 903

SuperPoint+SuperGlue在HLoc中的实战效果对比:5大公开数据集测试报告

本文在HLoc框架下,对传统SIFT与深度学习组合SuperPoint+SuperGlue在五大公开数据集上的视觉定位效果进行了实战对比测试。报告详细分析了两种方案在Aachen Day-Night、RobotCar Seasons等不同光照、季节及场景下的表现,揭示了SuperPoint+SuperGlue在应对剧烈光照变化和长期外观变化时的显著优势,并提供了基于HLoc模块化设计的选型与配置策略。

weixin_29093169的博客 425

MFC停靠窗口实战:CDockablePane从创建到控件布局的完整指南(附残影问题排查)

本文提供了MFC中CDockablePane停靠窗口的完整实战指南,涵盖从自定义窗格类创建、主框架集成、内部控件布局到高级功能定制的全过程。针对开发中常见的“残影”视觉问题,文章深入剖析了其根源,并给出了系统性的排查步骤与解决方案,帮助开发者构建稳定、专业的可停靠用户界面。

sun99的博客 615

设计模式第19讲——命令模式(Command)

命令模式(Command Pattern)是一种行为型设计模式,又叫动作模式或事务模式。一、什么是命令模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景4.2 java场景五、代码实现5.0 UML类图 5.1 抽象命令(Command)——Command5.2接收者(Receiver)——Chef5.3具体命令(Concrete Command)——OrderCommand六、总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 1万+

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5515

JAVA设计模式之命令模式详解

命令模式(command pattern)的定义: 命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象并且能够支持请求(命令)的排队执行、记录日志、撤销等 (附加控制)功能。命令模式的核心是将指令信息封装成一个对象,并将此对象作为参数发送给接收方去执行,达到使命令的请求与执行方解耦,双方只通过传递各种命令对象来完成任务.在实际的开发中,如果你用到的编程语言并不支持用函数作为参数来传递,那么就可以借助命令模式将函数封装为对象来使用。

励志成为一名优秀的全能型软件开发工程师。 1943

CVPR 2026 即插即用 | 注意力篇 | PFG:多尺度大核+像素级频率门控,特征显著增强,精准适配边缘纹理场景

本文提出了一种基于频率引导的轻量级外围门控模块PFG,用于高效时空预测学习。该模块通过多尺度大核分解卷积(1×K + K×1)捕捉外围空间依赖,同时利用固定频率滤波器提取高频线索,动态融合不同尺度的外围特征。核心创新包括:外围聚焦的多尺度空间增强、频率引导的动态融合机制、双阶段归一化协同等。实验表明,PFGNet在多个基准数据集上达到SOTA性能,同时保持较低计算复杂度。该模块可直接嵌入各类视觉模型,适用于需要强化空间-通道协同表达的轻量级任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 484

从零开始学 AUTOSAR:深入浅出 SAE J1939 诊断通信管理器(J1939Dcm)深度完整版

SAE J1939 是美国汽车工程师学会制定的重型车辆 CAN 总线通信标准,覆盖卡车、客车、工程机械、农机、船舶等,是商用车领域的 “通用语言”。基于CAN 2.0B 扩展帧(29 位 ID)(车规主流)PGN(参数组号)+ SPN(可疑参数号)核心标准:J1939-21:数据链路层(CAN 帧格式、地址声明)J1939-71:应用层(普通信号、报文)诊断层(核心!J1939Dcm 依据)J1939-81:网络管理(地址管理、节点检测)

getusushu的博客 118

Java设计模式 Design Pattern:命令模式 Command Pattern

Java设计模式 Design Pattern:命令模式 Command Pattern 目的 Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support un...

ahch8077的博客 165

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

Java 设计模式-命令模式(Command Pattern)

命令模式(Command Pattern)是对象的行为模式,其意图是将请求封装在对象的内部。 命令模式涉及的角色有: 客户端(Client )角色:负责创建一个具体的命令,并指定命令的接受者 命令(Command)角色:定义一个命令公共的操作接口 具体命令(Concrete Command)角色:定义一个命令的接收者和行为之间的耦合。实现命令接口的公共接口,调用接......

技术分享 261

【PostgreSQL教程】PostgreSQL 高级篇之子查询

子查询也可称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、、>=、

No8g攻城狮的博客 1206

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java设计模式 十七 命令模式 (Command Pattern)

命令模式通过将请求封装成对象,解耦了请求的发送者和接收者,提供了灵活的执行、撤销和组合命令的能力。它在需要解耦请求和执行的场景中非常有用,尤其适用于GUI系统、任务调度、宏命令等应用场景。虽然命令模式可能增加系统的复杂度,但它在结构上更具可扩展性和灵活性,非常适合处理复杂的操作逻辑。

空 747

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java设计模式——命令模式【Command Pattern】

Java设计模式、命令模式、Command Pattern

scorpio的博客 1042

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

Java设计模式之《命令模式》

命令模式是一种行为设计模式,它将请求封装成独立对象,实现请求发出者与执行者的解耦。该模式包含命令接口、具体命令、接收者、调用者和客户端五个角色。典型应用场景包括任务调度、数据库操作和餐厅点餐等。优点在于解耦彻底、支持撤销/队列功能,但会增加类的数量。通过将"执行动作"封装为命令对象,使系统更灵活,但需权衡复杂度。

weixin_50055999的博客 1491

JAVA设计模式之 命令模式【Command Pattern】

一、概述     命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。核心在于引入了命令类,通过命令类来降低发送者和接收者的耦合度,请求发送者只需指定一个命令对象,再通过命令对象来调用请求接收者的处理方法,命令模式是一种对象行为型模式。 二、使用场景 1>、系统要求请求发送者和接收者的解耦

小吕丶Code阶区 2592

【Java 设计模式】行为型之命令模式

命令模式是一种行为型设计模式,用于将请求封装为对象,使得可以参数化客户端对象,并且能够排队、记录请求,以及支持撤销操作。命令模式的核心思想是将请求发送者和接收者解耦,通过命令对象来封装请求。命令对象包含了执行请求的方法,通过这种方式实现了请求的发起和执行的解耦。命令模式通常包含四个主要角色:命令(Command)、具体命令(Concrete Command)、命令发送者(Invoker)、命令接收者(Receiver)。声明了执行请求的接口实现了命令接口,对具体的请求进行了封装。

好久不见的流星 2033

【设计模式】Java设计模式 - 命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

qq_43843951的博客 904

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 命令模式(Command) - Java实现

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 命令模式(Command) 目的:达到命令的发出者和执行者之间解耦,实现请求和执行分开。一、说明: 1、Command 命令(接口); 2、Receiver 命令接收者; 3、MyCommand 命令.实现类; 4、Invoker 命令发送者。二、Java实现,代码如下: 1、Comm

Z 392
上一篇: jsp使用include导入html乱码解决
下一篇: 工厂方法与抽象工厂
cst_code
博客等级 码龄10年 4粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值