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{@Overridepublic 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{@Overrideprotected 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.mzph.cn/news/625403.shtml

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

相关文章

ctrl+c与kill -2的区别

单进程场景 在单进程的情况下,ctrlc和kill -2是一模一样的,都是向指定的进程发送SIGINT信号. 如果进程中注册了捕捉SIGINT信号的处理函数,那么这个信号会被进程处理,例如: void processB() {// Set signal handler …

el-tabs那些事

去除el-tab-pane的内边距 :deep(.el-tabs--border-card > .el-tabs__content) {padding: 0; }

VMware workstation安装Fedora-Server-39-1.5虚拟机并配置网络

VMware workstation安装Fedora-Server-39-1.5虚拟机并配置网络 Fedora包含的软件以自由及开放源码许可来发布,并旨在成为该技术领域的领先者。Fedora在专注创新、抢先集成新技术、与上游Linux社区紧密工作方面拥有良好名声。该文档适用于在VMware workstation平台安…

对C语言的标准库、头文件的理解

1.什么是标准库呢? 有很多我们使用的功能并不是我们自己写的,而是C语言自带的。而这些C 语言自带的所有这些功能统称为“标准库”(standard library),包含C 内置函数、常量和头文件。我们直接调用即可。 2.什么是头文件呢? 不同的…

java-方法:函数、过程

方法作用 - 封装一段特定的业务逻辑功能 - 尽可能的独立,一个方法只干一件事 - 方法可以被反复多次调用 - 减少代码重复,有利于代码复用,有利于代码维护 定义方法:五要素 ​ 修饰词 返回值类型 方法名(参数列表…

矩阵快速幂算法总结

题目链接 活动 - AcWing 本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1305/ 题解 代码 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;type…

MySQL多表关联查询练习题

一、创建表的素材 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#xff1a; …

Android的setContentView流程

一.Activity里面的mWindow是啥 在ActivityThread的performLaunchActivity方法里面&#xff1a; private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {ActivityInfo aInfo r.activityInfo;if (r.packageInfo null) {r.packageInfo getP…

15 万奖金!开放原子开源大赛 OpenAnolis -云原生赛题报名开始

开放原子开源基金会牵头发起的首届“开放原子开源大赛”&#xff0c;旨在联合开源组织、企事业单位、高等院校、科研院所、行业组织、投融资机构等多方资源&#xff0c;充分发挥产业链生态上下游的协同能力&#xff0c;基于开源共享、共建共治的原则共同举办。大赛搭建面向全球…

教育新势力:多端口知识付费小程序重塑在线教育生态

随着知识付费市场的蓬勃发展&#xff0c;多端口知识付费小程序已成为课程销售的关键工具。本文将探讨多端口知识付费小程序的重要性和乔拓云教育系统的功能&#xff0c;帮助您在网上成功销售课程。 一、多端口知识付费小程序的优点 多端口知识付费小程序具有多渠道触达用户、提…

IOS 相机权限申请-swift

配置描述 在Info.plist文件中&#xff0c;新建一个键值对Privacy - Camera Usage Description&#xff08;或者NSCameraUsageDescription&#xff09;&#xff0c;值为申请描述说明&#xff0c;自定义的 申请 然后在需要申请的文件中导入AVFoundation import AVFoundation…

你觉得哪个软件写verilog体验最好?

**“你觉得哪个软件写verilog体验最好&#xff1f;”**这个问题是我再网络上看到的一个热点话题&#xff0c;浏览量高达733911&#xff0c;引起大家的广泛讨论。移知教育小编特意请教了行业大咖&#xff0c;下面为大家分享解答&#xff0c;希望能为大家带来帮助。 有几个流行的…

跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置、窗口事件

引入GLFW&#xff1a; 在vendor里创建GLFW文件夹&#xff1a; 在github上下载&#xff0c;把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置&#xff1a;12、13、15、36…

Hudi metadata table(元数据表)

什么是metadata表 Metadata表即Hudi元数据表,是一种特殊的Hudi表,对用户隐藏。该表用于存放普通Hudi表的元数据信息。Metadata表包含在普通Hudi表内部,与Hudi表是一一对应关系。 元数据表的作用 ApacheHudi元数据表可以显著提高查询的读/写性能。元数据表的主要目的是消…

分布式架构理论:从头梳理分布式架构的重难点

文章目录 一、分布式架构 - 系统理论1、分布式一致性与CAP理论2、BASE理论3、分布式一致性算法&#xff1a;Raft&#xff08;1&#xff09;Paxos算法&#xff08;2&#xff09;Raft算法&#xff08;3&#xff09;共识算法&#xff1a;拜占庭将军问题 4、脑裂现象和Lease机制&am…

Godot FileDialog无法访问其它盘符的文件

问题描述 使用Godot的FileDialog对象访问Windows系统的文件&#xff0c;例如&#xff1a; func _on_hud_sig_save():$FileDlg.set_file_mode(FileDialog.FILE_MODE_SAVE_FILE)$FileDlg.popup_centered_ratio(0.33)await $FileDlg.file_selectedvar filename $FileDlg.get_cu…

AI模型理解误区:微调垂直行业-VS-企业专属知识库或AI助理

概述 企业定制私有化大模型的区别&#xff0c;分为训练大模型和调用大模型两种方向&#xff0c;以及企业自己的智能客服的实现方法。 - 企业定制的私有化大模型与一般的大模型不同&#xff0c;需要高成本训练。- 企业可以选择调用已经训练好的大模型来应用。- 企业可以使用向量…

【经典面试题目】--从1百万(一亿)的数据中找top100大的数

目录 概述下面我们看具体方法&#xff1a;方法一&#xff1a;基于quicksort实现的原理如下方法二&#xff1a;minHeap&#xff08;小顶堆实现&#xff09; 问题总结&#xff1a; 概述 一种做法是我们直接进行一个堆排序&#xff0c;或者快排&#xff0c;然后打印前100个即可&a…

今天吃什么小游戏(基于Flask框架搭建的简单应用程序,用于随机选择午餐选项。代码分为两部分:Python部分和HTML模板部分)

今天吃什么 一个简单有趣的外卖点饭网站&#xff0c;不知道吃什么的时候&#xff0c;都可以用它自动决定你要吃的&#xff0c;包括各种烧烤、火锅、螺蛳粉、刀削面、小笼包、麦当劳等午餐全部都在内。点击开始它会随意调出不同的午餐&#xff0c;点击停止就会挑选一个你准备要吃…

【学习笔记】伯努利数

似乎是一篇又水又没啥用的博客。 Part 1 首先给出伯努利数 B n B_n Bn​的生成函数定义&#xff1a; x e x − 1 ∑ n 0 ∞ B n x n n ! \frac{x}{e^x-1}\sum_{n0}^{\infty}\frac{B_nx^n}{n!} ex−1x​n0∑∞​n!Bn​xn​ 伯努利数可以用来等幂求和。 定义 S m ( n ) ∑…