当前位置: 首页 > 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 清理一下缓存 亲测有效...

Unity 2021.3新手实战:C#脚本+物理系统+UI交互三模块协同开发

1. 这不是“又一个Unity入门教程”&#xff0c;而是我带6个实习生从零做出可玩Demo的真实复盘你点开这个标题&#xff0c;大概率是刚装完Unity&#xff0c;对着空荡荡的Scene视图发呆——新建一个Cube&#xff0c;拖进一个C#脚本&#xff0c;写了个Debug.Log("Hello"…...

RMAN 增量备份(Incremental Backup)

1、概念RMAN 增量备份是指 RMAN 只备份自上次备份以来发生过更改的数据块&#xff0c;而不是备份整个数据库的所有数据块。它是 Oracle 为解决大型数据库全量备份时间长、占用空间大的问题而设计的核心特性&#xff0c;也是现代企业级备份策略的基础。简单类比&#xff1a;全库…...

【小白快速上手】Windows 系统 OpenClaw v2.7.5 一键部署完整教程(包含安装包)

OpenClaw 一键安装完整教程&#xff08;2026 最新&#xff09; 适配系统&#xff1a;Windows10/11 64 位当前版本&#xff1a;v2.7.5&#xff08;虾壳云版&#xff09;文件大小&#xff1a;约 58.7MB下载地址&#xff1a;https://xiake.yun/api/download/package/16?promoCod…...

跨境社媒运营真正难的 不是内容不够而是账号越来越没有“主线感”

很多团队做跨境社媒时&#xff0c;前期最容易把注意力放在内容数量上。 今天发没发&#xff0c;明天补几条&#xff0c;哪个平台还没铺&#xff0c;哪种形式最近更容易起量。 这些当然重要&#xff0c;因为账号在起步阶段&#xff0c;首先得先“动起来”。但真正做一段时间之后…...

基于RK平台的智慧出行方案:从芯片选型到车规级开发的实战指南

1. 项目概述&#xff1a;当“智慧出行”遇上“RK平台”最近几年&#xff0c;如果你关注汽车电子或者物联网领域&#xff0c;一定对“智慧出行”这个词不陌生。它早已不是科幻电影里的概念&#xff0c;而是真真切切地走进了我们的生活&#xff0c;从智能座舱里流畅的语音交互、多…...

机器学习核函数原理与实战选型指南

1. 什么是机器学习中的核函数&#xff1f;它到底在解决什么问题&#xff1f;“Types of Kernels in Machine Learning”这个标题看起来像教科书目录里的一节&#xff0c;但如果你真在项目里调过SVM(kernelrbf)、用过sklearn.metrics.pairwise.rbf_kernel、或者被kernel trick这…...

心理学论文降AI工具免费推荐:2026年心理学毕业论文知网维普降AI4.8元亲测完整方案

心理学论文降AI工具免费推荐&#xff1a;2026年心理学毕业论文知网维普降AI4.8元亲测完整方案 答辩前夕&#xff0c;AI率36%&#xff0c;学校要求15%以下。 用嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;两小时搞定&#xff0c;一次过…...

戴森球计划工厂蓝图架构深度解析:构建高效星际生产线的核心策略

戴森球计划工厂蓝图架构深度解析&#xff1a;构建高效星际生产线的核心策略 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints 项目作为戴森球计划游戏中最…...

【限时解密】全球仅12家旅游公司跑通的AI Agent冷启动模型:含私有知识库构建SOP

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;【限时解密】全球仅12家旅游公司跑通的AI Agent冷启动模型&#xff1a;含私有知识库构建SOP 在旅游行业AI落地实践中&#xff0c;“冷启动难”长期制约Agent规模化部署——93%的试点项目因知识断层、意图歧义…...

3分钟学会洛雪音乐音源配置:免费获取全网高品质音乐的终极指南

3分钟学会洛雪音乐音源配置&#xff1a;免费获取全网高品质音乐的终极指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为找不到高质量免费音乐资源而烦恼吗&#xff1f;lxmusic-项目为你提…...