16 命令行模式

news2024/9/27 19:16:10

命令行模式

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年腾讯云服务器多少钱1年?超便宜62元一年

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

Github项目推荐-clone-voice

项目地址 GitHub - jianchang512/clone-voice 项目简述 一个声音ai工具。基于python编写。作用是音色复用。下面是官方说明:“这是一个声音克隆工具,可使用任何人类音色,将一段文字合成为使用该音色说话的声音,或者将一个声音使…

新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?

作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件,好在我们可以通过仿真软件来模拟硬件,本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法,需要用到的3款仿真软件如下: Modbus Poll 64位 / Modbus Poll 32位(根据自己机器位数选…

【Python学习】Python学习14-函数

目录 【Python学习】Python学习14-函数 前言自定义函数创建语法自定义函数与调用参数传递参考 文章所属专区 Python学习 前言 本章节主要说明Python的函数。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应…

自定义vector的实现

实现前需要思考的一个问题 为什么需要将空间的申请与对象的构建分开 查看vector的模板参数时可以看到其有第三个参数是空间适配器allocator,查找其对外提供的成员函数不难发现它的实现逻辑是将空间的申请与对象的构建分开的,为什么呢?不弄清…

云畅科技技术中心被认定为湖南省省级企业技术中心

近日,湖南省工业和信息化厅公布《2023年第二批湖南省省级企业技术中心(第29批)》,云畅科技技术中心作为研发设计型代表入选。 省级企业技术中心是强化企业技术创新主体地位,增强企业自主创新能力,推动工业企业高质量发展的一个重要…

搬运5款帮你优化电脑的小工具软件

​ 你想让你的电脑更好用吗?这里有五款电脑软件可以帮你,它们可以让你的电脑更高效、美观、安全,快来看看吧! 1.窗口管理——MaxMax ​ MaxMax是一款窗口管理软件,可以让你自定义窗口的最大化行为,避免窗…

STC8H8K蓝牙智能巡线小车——2. 点亮左右转弯灯与危险报警灯

任务调用示例 RTX 51 TNY 可做多任务调度,API较为简单。 /* 接口API */// 创建任务 extern unsigned char os_create_task (unsigned char task_id); // 结束任务 extern unsigned char os_delete_task (unsigned char task_id);// 等待 extern unsig…

Ubuntu20.04下A-LOAM配置安装及测试教程(包含报错问题踩坑)

参考文章: ubuntu20.04下ros运行A-LOAM Ubuntu20.04下运行LOAM系列:A-LOAM、LeGO-LOAM、SC-LeGO-LOAM、LIO-SAM 和 LVI-SAM 需要学习源码的同学可以下载LOAM论文 LOAM论文链接 1.需要安装的库文件 1.1Eigen 3.3 可以直接使用apt命令安装,或…

C#,字符串匹配(模式搜索)AC(Aho Corasick)算法的源代码

Aho-Corasick算法简称AC算法,也称为AC自动机(Aho-Corasick)算法,1975年产生于贝尔实验室(The Bell Labs),是一种用于解决多模式字符串匹配的经典算法之一。 the Bell Lab 本文的运行效果: AC算法以模式树…

Android 13.0仿ios的hotseat效果修改hotseat样式

1.概述 在13.0系统产品rom定制化开发中,在项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了 效…

Docker部署Traefik结合内网穿透远程访问Dashboard界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

『 C++ 』AVL树详解 ( 万字 )

🦈STL容器类型 在STL的容器中,分为几种容器: 序列式容器(Sequence Containers): 这些容器以线性顺序存储元素,保留了元素的插入顺序。 支持随机访问,因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…

tensorflow报错: DNN library is no found

错误描述 如上图在执行程序的时候,会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题,或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下,也就是进入你的cuda的驱动的安装目…

【Leetcode 78】子集 —— 回溯法

78. 子集 给你一个整数数组nums,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2],[…

记ubuntu2004通过NetworkManager修改网络的优先级

这里写自定义目录标题 前言步骤 前言 起因在于万恶的校园网,突然台式有线死活没法认证(感觉是IP冲突了?另外一台电脑同样的系统就没有问题,连路由器WIFI也是可以的,路由器设置的是桥接模式,有没有大佬提供…

欧盟产品安全新规来袭,亚马逊发出紧急提醒(GPSR)要求

欧盟产品安全新规来袭,亚马逊发出紧急提醒(GPSR)要求 一、发布新规 这世界上唯一不变的事,或许就是变化本身。 在跨境电商领域,这个道理再次得到验证。近日,不少卖家都收到了一封来自亚马逊的通知。通知中…

德语B2 SampleAcademy

德语B2 SampleAcademy 一, Zweigliedrige Konnektion1, entweder... oder2, nicht nur... sondern auch3,sowohl... als auch4,einerseits... andererseits5, zwar...aber6, weder...noch7,je...desto/umso 一, Zweigliedrige Konnektion discontinuous conjunctions 1,…

图解python | 基础数据类型

1.Python变量类型 Python基本数据类型一般分为6种:数值(Numbers)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)、集合&#xff…