当前位置: 首页 > 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();}
}

🔍类图


🔍适用场景


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


http://www.lryc.cn/news/354728.html

相关文章:

  • 解决vue3项目vite打包忽略.vue扩展名
  • Vue基础(数据绑定、export使用)
  • 【传知代码】基于图神经网络的知识追踪方法(论文复现)
  • Vue与React、Angular的比较
  • LINQ(二) —— 流式语句
  • 怎么查看MySQL服务的最大连接,已经使用的连接数?怎么配置最大连接数?
  • 微信小程序毕业设计-跑腿系统项目开发实战(附源码+演示视频+LW)
  • stm32通过esp8266连接阿里云平台代码讲解
  • 突发!某大厂机房掉电,MySQL数据库无法启动,紧急恢复过程...
  • SpringCloudAlibaba:6.2RocketMQ的普通消息的使用
  • vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据
  • 2024年上半年软考什么时候查成绩?附查询流程
  • css3实现0.5px边框
  • U-Net网络
  • 不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!
  • 【vue-5】双向数据绑定v-model及修饰符
  • [STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6
  • 【java程序设计期末复习】chapter4 类和对象
  • ios:Command PhaseScriptExecution failed with a nonzero exit code
  • 《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】
  • 数据挖掘案例-航空公司客户价值分析
  • 决策树与机器学习实战【代码为主】
  • 从感知机到神经网络
  • 【HMGD】STM32/GD32 I2C DMA 主从通信
  • leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度
  • Redux基础
  • 国外目标公司的任何一个联系人也许都有意义
  • 因为本地证书太旧或不全导致的 HTTPS 访问失败问题20240520
  • Lua获取表的长度
  • python九九乘法表的打印思考及实现