16 命令行模式

命令行模式

将行为的执行与与行为的调用通过命令分离,行为的的调用者不需要知道具体是哪个类执行的,他们之间通过命令连接。
在这里插入图片描述

demo的目录结构
在这里插入图片描述
命令的执行者(接口)

package behavioralpattern.commandpattern.actuator;

import java.math.BigDecimal;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/15 16:12
 * @description:
 * 命令的执行者
 */
public interface Actuator {
    BigDecimal act(BigDecimal x,BigDecimal y);
}

命令的执行者(实现)

package behavioralpattern.commandpattern.actuator;

import java.math.BigDecimal;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/15 16:17
 * @description: 加法执行器
 */
public class Add implements Actuator{
    @Override
    public BigDecimal act(BigDecimal x, BigDecimal y) {
        return x.add(y);
    }
}

命令的抽象层

package behavioralpattern.commandpattern.command;

import behavioralpattern.commandpattern.actuator.Actuator;
import behavioralpattern.commandpattern.actuator.Add;

import java.math.BigDecimal;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/15 16:07
 * @description:
 * 命令的抽象
 */
public abstract class Command {
    private final Actuator actuator;

    public Command() {
        // 初始化一个具体的执行器
        actuator = setActuator();
    }
    // 交给子类确定是什么执行器
    protected abstract Actuator setActuator();

    /**
     * 命令执行,command本身不进行具体的操作
     * @param x 第一个参数
     * @param y 第二个参数
     * @return 返回的执行结果
     */
    public BigDecimal execute(BigDecimal x,BigDecimal y){
        return actuator.act(x,y);
    }
}

命令的实现

package behavioralpattern.commandpattern.command;

import behavioralpattern.commandpattern.actuator.Actuator;
import behavioralpattern.commandpattern.actuator.Add;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/15 16:09
 * @description:
 * 加法命令
 */
public class AddC extends Command{
    @Override
    protected Actuator setActuator() {
        return new Add();
    }
}

客户端&调用者

package behavioralpattern.commandpattern;

import behavioralpattern.commandpattern.command.*;

import java.math.BigDecimal;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/14 19:23
 * @description:
 * 命令模式
 *
 */
public class CommandPattern {
    public static void main(String[] args) {
        // 创建一个命令发起者
        Invoker invoker = new Invoker();
        // 创建几个命令
        Command addC = new AddC();
        Command subC = new SubC();
        Command mulC = new MulC();
        Command divC = new DivC();
        // 定义2个数
        String x = "100";
        String y = "10";
        System.out.printf("x:%s,y:%s\n",x,y);
        // 执行加法
        invoker.setCommand(new AddC());
        BigDecimal bigDecimal = invoker.execCommand(x, y);
        System.out.println("加法执行结果:"+bigDecimal);
        // 执行除法
        invoker.setCommand(new DivC());
        BigDecimal bigDecimal1 = invoker.execCommand(x, y);
        System.out.println("除法执行结果:"+bigDecimal1);
    }
}
// 命令发起者
class Invoker{
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public BigDecimal execCommand(String x, String y){
        return command.execute(new BigDecimal(x),new BigDecimal(y));
    }
}

对于调用者来说,命令的具体执行者是不可见的,他接触到的是一个个命令,命令和命令的执行者都可以非常方便的扩展。完整代码见 gitee

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宁夏银行关键系统基于OceanBase的创新实践

宁夏银行成立于 1998 年,是宁夏第一家“宁”字号地方商业银行,西部地区第一家以省级行政区命名的地方商业银行。2016 年,被中国人民银行评为宁夏地区系统性重要银行。目前,全行设分支机构 97 家,其中总行营业部 1 家&a…

vulnhub靶场之DC-9

一.环境搭建 1.靶场描述 DC-9 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The ultimate goal of this challenge is to get root and to read the one and only flag. Linux skills and famili…

编码技巧:如何在Golang中高效解析和生成XML

编码技巧:如何在Golang中高效解析和生成XML 引言Golang中的XML基础解析XML文件生成XML文件错误处理和调试高级技巧和最佳实践总结 引言 在当今数据驱动的编程世界中,有效地处理各种数据格式是每个开发人员必备的技能之一。其中,XML&#xff…

【MATLAB】CEEMD+FFT+HHT组合算法

代码原理 CEEMD(集合经验模态分解)FFT(快速傅里叶变换)HHT(希尔伯特-黄变换)组合算法也是一种常见的信号处理和分析方法。这种组合算法结合了CEEMD、FFT和HHT三个步骤,可以处理非线性和非平稳信…

Vue入门七(Vuex的使用|Vue-router|LocalStorage与SessionStorage和cookie的使用)

文章目录 一、Vuex1)理解vuex2)优点3)何时使用?4)使用步骤① 安装vuex② 注册vuex③ 引用vuex④ 创建仓库Store五个模块介绍 5)基本使用 二、Vue-router三、LocalStorage与SessionStorage、cookie的使用 一…

如何用GPT/GPT4完成AI绘图和论文写作?

详情点击链接:如何用GPT/GPT4完成AI绘图和论文写作? 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析,AI画图,图像识别,文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Clau…

202406读书笔记|《沉睡的线条世界》——翻山越岭,只为与你分享点滴的快乐

《沉睡的线条世界》登登登Dn绘著,简简单单的小画,简简单单的线条,简简单单的语言,温馨又有一点暖心。 怎样的你都好,做最真实的自己。 部分节选如下: 愿你我永远有热情,永远能为生活的每一个小惊…

运筹说 第67期 | 动态规划模型的建立与求解

通过前一期的学习,我们已经学会了动态规划的基本概念和基本原理。本期小编带大家学习动态规划模型的建立与求解。 动态规划模型的建立 一 概述 建立动态规划的模型,就是分析问题并建立问题的动态规划基本方程。 成功地应用动态规划方法的关键&#x…

flutter使用getx进行数据状态管理,实现页面响应式

无论是什么样的应用,都还是需要最基础的数据来支撑的,而且不同的页面之间可能需要共享数据状态,这就显得数据状态管理非常有必要了。因为我这里使用了get依赖库,所以就可以直接在项目中使用getx来管理状态,不想再使用别…

PXE 高效批量网络装机

前提: 虚拟机恢复到初始化 调整网卡为vm1 关闭防火墙 安全linux systemctl stop firewalld vim /etc/selinux/config 配置IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 重启网卡 systemctl restart network 挂载磁盘 安装yum源 安装服务 yum install vs…

如何购买腾讯云服务器?图文教程超详细

腾讯云服务器购买流程很简单,有两种购买方式,直接在官方活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动…

算法-二分专题

文章目录 概念应用场景代码模板OJ练习寻找指定元素1题目描述输入描述输出描述样例题解 寻找指定元素2题目描述输入描述输出描述样例题解 寻找指定元素3题目描述输入描述输出描述样例题解 寻找指定元素4题目描述输入描述输出描述样例题解 寻找指定元素5题目描述输入描述输出描述…

SpringBoot教程(十四) | SpringBoot集成Redis(全网最全)

SpringBoot教程(十四) | SpringBoot集成Redis(全网最全) 一、Redis集成简介 Redis是我们Java开发中,使用频次非常高的一个nosql数据库,数据以key-value键值对的形式存储在内存中。redis的常用使用场景,可以做缓存,分布式锁&…

Java多线程——并发和并行、实现方法

多线程 并发和并行 实现方法 代码演示 方式一 package com.qiong.thread1;public class MyThread extends Thread{Overridepublic void run() {for (int i 0; i < 20; i) {System.out.println(getName() "Hello World");}} }package com.qiong.thread1;public…

随心玩玩(十二)通义千问——LLM大模型微调

写在前面&#xff1a;使劲的摸鱼&#xff0c;摸到的鱼才是自己的~ 文章目录 简介环境配置模型加载jupyter远程配置快速使用微调示例部署方案总结附录&#xff1a; ReAct Prompting 示例准备工作一&#xff1a;样例问题、样例工具准备工作二&#xff1a;ReAct 模版步骤一&#x…

高通sm7250与765G芯片是什么关系?(一百八十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【翻译】Qt Designer 如何使用资源文件

原文地址&#xff1a;https://doc.qt.io/qt-6/designer-resources.html Qt的资源浏览器是用于管理应用程序资源的工具&#xff0c;可以让开发者方便地查看和管理应用程序中的各种资源文件&#xff0c;例如图像、字体、布局文件、对话框等。 资源浏览器提供了一个可视化的界面&…

【BBuf的CUDA笔记】十二,LayerNorm/RMSNorm的重计算实现

带注释版本的实现被写到了这里&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/apex 由于有很多个人理解&#xff0c;读者可配合当前文章谨慎理解。 0x0. 背景 我也是偶然在知乎的一个问题下看到这个问题&#xff0c;大概就是说在使用apex的…

移动端开发进阶之蓝牙通讯(二)

移动端开发进阶之蓝牙通讯&#xff08;二&#xff09; 蓝牙广播是一种无线通讯技术&#xff0c;通过无线电波传输数据&#xff1b; 在蓝牙低功耗&#xff08;BLE&#xff09;协议中&#xff0c;广播通信是其重要组成部分&#xff0c;主要有两类使用场景&#xff1a; 单一方向的…

QT-day6

作业1&#xff1a;数据库增删查改 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);if (!db.contains("stu.db")){db QSqlDatabase::addDatabase(&q…