当前位置: 首页 > news >正文

【设计模式】JAVA Design Patterns——Commander(指挥官模式)

🔍目的


用于处理执行分布式事务时可能遇到的所有问题。

🔍解释


处理分布式事务很棘手,但如果我们不仔细处理,可能会带来不想要的后果。假设我们有一个电子商务网站,它有一个支付微服务和一个运输微服务。如果当前运输可用,但支付服务不可用,或者反之,当我们已经收到用户的订单后,我们应该如何处理?我们需要有一个机制来处理这些情况。我们必须将订单指向其中一个服务(在这个例子中是运输),然后将订单添加到另一个服务的数据库中(在这个例子中是支付),因为两个数据库不能原子地更新。如果我们当前无法做到这一点,应该有一个队列,可以将这个请求排队,并且必须有一个机制,允许队列中出现失败。所有这些都需要通过不断的重试,在保证幂等性(即使请求多次,变化只应用一次)的情况下,由一个指挥类来完成,以达到最终一致性的状态。

程序示例

 定义命令接口

interface Command {void execute();
}

创建具体的命令类

class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) {this.light = light;}public void execute() {light.turnOn();}
}

创建接收者类

class Light {public void turnOn() {System.out.println("Light is on");}
}

创建调用者类

class RemoteControl {private Command command;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();}
}

 执行内容类

public class CommanderPatternExample {public static void main(String[] args) {Light light = new Light();Command command = new LightOnCommand(light);RemoteControl remoteControl = new RemoteControl();remoteControl.setCommand(command);remoteControl.pressButton();}
}

🔍类图


🔍适用场景


当我们需要提交两个数据库去完成事务,提交不是原子性且可能因此造成问题时,适合用这个设计模式。


相关文章:

【设计模式】JAVA Design Patterns——Commander(指挥官模式)

🔍目的 用于处理执行分布式事务时可能遇到的所有问题。 🔍解释 处理分布式事务很棘手,但如果我们不仔细处理,可能会带来不想要的后果。假设我们有一个电子商务网站,它有一个支付微服务和一个运输微服务。如果当前运输…...

解决vue3项目vite打包忽略.vue扩展名

项目打包时报could not relolve “...”,因为vite已不再默认忽略.vue扩展名。 解决方法如下: 在vite.config.js中配置vite使其忽略 .vue 扩展名(不建议忽略) 注意:即使忽略了.vue文件,在实际写的时候也要加…...

Vue基础(数据绑定、export使用)

1、简介 在使用vue开发的过程中,经常会遇到一些容易混淆的问题,因此,在本文中进行汇总操作,只有通过不断总结学习,才能更好掌握vue的使用(每天进步一点)。 2、数据绑定 在js中定义数据&#xf…...

【传知代码】基于图神经网络的知识追踪方法(论文复现)

前言:本文将深入探讨基于图神经网络的知识追踪方法,旨在通过构建知识图谱来捕捉知识之间的复杂关联,并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术,然后详细阐述如何将…...

Vue与React、Angular的比较

Vue、React和Angular是前端开发中三个流行的JavaScript框架,它们各自具有不同的特点、优势和适用场景。以下是对这三个框架的比较: 1. 基本概念 Vue:Vue是一套用于构建用户界面的渐进式框架,其核心库专注于视图层,易…...

LINQ(二) —— 流式语句

总目录 C# 语法总目录 LINQ 二 —— 流式语句 1.1 序列相关部分运算符1.2 查询相关部分运算符 1.1 序列相关部分运算符 Take 运算符:Take 是拿出序列的几个数 Skip 运算符:Skip 是跳过序列的前几个数 Reverse 运算符:Reverse 是将序列反转 …...

怎么查看MySQL服务的最大连接,已经使用的连接数?怎么配置最大连接数?

要查看和配置MySQL服务的最大连接数以及已经使用的最大连接数,可以使用以下SQL语句和步骤: 查看MySQL服务的最大连接数和已经使用的最大连接数 查看当前最大连接数: SHOW VARIABLES LIKE max_connections;查看已经使用的最大连接数&#xff…...

微信小程序毕业设计-跑腿系统项目开发实战(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...

stm32通过esp8266连接阿里云平台代码讲解

连接服务器 首先,按照一定的规则,获取连接阿里服务器所需要的ClientID(客户端D)、Username(用户名)、Passward(密码),ServerIP(域名),ServerPort&#xff08…...

突发!某大厂机房掉电,MySQL数据库无法启动,紧急恢复过程...

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…...

SpringCloudAlibaba:6.2RocketMQ的普通消息的使用

简介 普通消息也叫并发消息&#xff0c;是发送效率最高&#xff0c;使用最多的一种 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSch…...

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据

样式 在趋势图中点击某一个柱状图&#xff0c;出现下面的弹窗 代码实现 主要是在趋势图页面代码中&#xff0c;在初始化趋势图的设置中&#xff0c;添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…...

2024年上半年软考什么时候查成绩?附查询流程

考试一旦结束&#xff0c;并不意味着与考试相关的事情也就结束了。2024年上半年信息系统项目管理师等软考考试结束后&#xff0c;我们还需要关注考后和证书相关的事情&#xff0c;比如成绩查询、证书领取等等。 2024年上半年软考成绩查询 查询时间&#xff1a;预计在2024年7月…...

css3实现0.5px边框

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css3实现0.5px边框</title><s…...

U-Net网络

U-Net网络 一、基本架构 各个箭头的解释&#xff1a; conv 3 * 3, ReLU&#xff1a;表示通过一个3 * 3的卷积层&#xff0c;并且该层自动附带一个非线性激活层&#xff08;ReLu&#xff09;copy and crop&#xff1a;表示进行裁剪然后再进行拼接&#xff08;在channel的维度上…...

不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!

大家好&#xff0c;我是电商糖果 视频号这两年看着抖音卖货的热度越来越高&#xff0c;也想挤进电商圈。 于是它模仿抖音推出了自己的电商平台——视频号小店。 只要商家入驻视频号小店&#xff0c;就可以在视频号售卖商品。 具体怎么操作呢&#xff0c;需要拍视频&#xf…...

【vue-5】双向数据绑定v-model及修饰符

单向数据绑定&#xff1a;当数据发生改变时&#xff0c;视图会自动更新&#xff0c;但当用户手动更改input的值&#xff0c;数据不会自动更新&#xff1b; 双向数据绑定&#xff1a;当数据发生改变时&#xff0c;视图会自动更新&#xff0c;但当用户手动更改input的值&#xf…...

[STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、详细步骤 1.光学指纹模块 2.配置STM32CUBEMX 3.程序设计 3.1 输出重定向 3.2 导入AS608库 3.3 更改端口宏定义 3.4 添加中断处理部分 3.5 初始化AS608 3.6 函数总览 3.7 录入指纹 3.8 验证指纹 3.9 删除指纹 3.10 清空指纹库 三、总结及资源 一、前言 …...

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 &#xff08;1&#xff09;面向机器语言 计算机处理信息的早期语言是所谓的机器语言&#xff0c;使用机器语言进行程序设计需要面向机器来编写代码&#xff0c;即需要针对不同的机器编写诸如0101 1100这样的指令序列。 &#xff08;2&#x…...

ios:Command PhaseScriptExecution failed with a nonzero exit code

问题 使用 xcode 跑项目真机调试的时候&#xff0c;一直报错 Command PhaseScriptExecution failed with a nonzero exit code。 解决 最终靠以下方法解决 删除Podfile.lock文件删除Pods文件删除.xcworkspace文件Pod installCommandShiftK 清理一下缓存 亲测有效...

RVC快速体验:无需复杂配置,轻松玩转语音变声

RVC快速体验&#xff1a;无需复杂配置&#xff0c;轻松玩转语音变声 1. RVC简介与核心功能 RVC&#xff08;Retrieval-based Voice Conversion&#xff09;是一款基于检索的语音转换工具&#xff0c;它能够将输入的语音快速转换为目标音色。与传统的语音转换技术相比&#xf…...

如何快速将网页转换为Figma设计稿:5分钟完成HTML到Figma的无缝转换

如何快速将网页转换为Figma设计稿&#xff1a;5分钟完成HTML到Figma的无缝转换 【免费下载链接】figma-html Convert any website to editable Figma designs 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html HTML到Figma转换工具是一款能够将任何网站转换为可…...

Anything to RealCharacters 2.5D转真人引擎效果可复现性验证:相同输入多轮输出质量评估

Anything to RealCharacters 2.5D转真人引擎效果可复现性验证&#xff1a;相同输入多轮输出质量评估 1. 项目概述与测试背景 Anything to RealCharacters 2.5D转真人引擎是基于通义千问Qwen-Image-Edit-2511底座和专属写实权重的图像转换系统&#xff0c;专门针对RTX 4090显卡…...

喜马拉雅音频下载器终极指南:快速批量下载VIP有声小说与付费专辑

喜马拉雅音频下载器终极指南&#xff1a;快速批量下载VIP有声小说与付费专辑 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 你是否…...

WorkshopDL:突破Steam创意工坊限制的跨平台下载解决方案

WorkshopDL&#xff1a;突破Steam创意工坊限制的跨平台下载解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 当你在Epic Games平台享受《无主之地3》的爽快射击&#xf…...

引领RFID电子标签打印新时代,打造标识打印系统新标杆

在当今快速发展的数字化时代&#xff0c;RFID电子标签凭借其非接触式数据读取、大容量存储以及高可靠性等优势&#xff0c;在众多领域得到了广泛应用。而HCreateLabelView 标识打印系统作为上海平宇码创科技自主研发的核心产品&#xff0c;紧密贴合这一趋势&#xff0c;为RFID电…...

OpenClaw本地代理方案:千问3.5-35B-A3B-FP8接口调用加速3种方法

OpenClaw本地代理方案&#xff1a;千问3.5-35B-A3B-FP8接口调用加速3种方法 1. 问题背景与挑战 去年夏天&#xff0c;当我第一次尝试用OpenClaw对接千问3.5-35B-A3B-FP8模型处理图文混合任务时&#xff0c;遇到了令人头疼的延迟问题。一个简单的"分析截图中的文字并生成…...

AgentCPM-Report开源模型教程:Pixel Epic在科研团队中的协作部署实践

AgentCPM-Report开源模型教程&#xff1a;Pixel Epic在科研团队中的协作部署实践 1. 项目介绍与核心价值 Pixel Epic是一款基于AgentCPM-Report大模型构建的创新型研究报告辅助工具。它将枯燥的科研工作流程转化为充满游戏化体验的交互过程&#xff0c;让团队成员在轻松愉悦的…...

欧拉法数值求解

18650锂电池高温热失控「啪」的一声炸响&#xff0c;我的无人机突然从半空坠落。拆开焦黑的外壳&#xff0c;罪魁祸首是那颗鼓包的18650电池——它经历了教科书般的热失控。这种广泛应用于笔记本电脑、充电宝的圆柱形锂电池&#xff0c;在高温下就像被点燃引线的火药桶。当电池…...

BiliTools:5分钟学会高效管理你的B站学习资源

BiliTools&#xff1a;5分钟学会高效管理你的B站学习资源 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你是否曾经…...