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

devtools/2024/9/23 4:30:26/

🔍目的


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

🔍解释


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

程序示例

 定义命令接口

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.ppmy.cn/devtools/44419.html

相关文章

JRT性能演示

演示视频 君生我未生,我生君已老,这里是java信创频道JRT,真信创-不糊弄。 基础架构决定上层建筑,和给有些品种的植物种植一样,品种不对,施肥浇水再多,也是不可能长成参天大树的。JRT吸收了各方…

Stable Diffusion教程

Stable Diffusion教程 Stable Diffusion是一种用于生成高质量图像的深度学习算法。它采用扩散模型的原理,通过迭代去噪生成图像。本文将详细介绍如何安装和使用Stable Diffusion生成图像。 一、环境配置 在开始使用Stable Diffusion之前,需要确保环境…

MySQL之创建高性能的索引(六)

创建高性能的索引 选择合适的索引列顺序 当使用前缀索引的时候,在某些条件值的基数比正常值高的时候,问题就来了。例如,在某些应用程序中,对于没有登录的用户,都将其用户名记录为"guest",在记录…

LeetCode2.两数相加

题目链接: 2. 两数相加 - 力扣(LeetCode) 分析:这个题目和之前所做的数组求和问题大同小异,只不过增加了链表的情景,需要大家考虑链表中可能出现的情况而已,有兴趣的同学可以先看这个链接&…

618手把手教你捡漏服务器

618最全捡漏攻略 捡漏规则1、新人优惠⭐⭐⭐2、教育优惠⭐⭐3、回馈活动⭐️ ECS价格对比新人优惠💝京东云 50/年百度云 60.69/年阿里云 82/年腾讯云 99/年 回馈活动🎁阿里云 教育优惠🏫阿里云腾讯云 hi,好久不见各位,…

Linux学习笔记(epoll,IO多路复用)

Linux learning note 1、epoll的使用场景2、epoll的使用方法和内部原理2.1、创建epoll2.2、使用epoll监听和处理事件 3、示例 1、epoll的使用场景 epoll的英文全称是extend poll,顾名思义是poll的升级版。常见的IO复用技术有select,poll,epo…

SQL 语言:嵌入式 SQL 和动态 SQL

文章目录 基本概述嵌入式 SQL动态 SQL总结 基本概述 嵌入式SQL和动态SQL是两种在应用程序中嵌入和使用SQL语句的方法。它们都允许开发人员在编程语言中编写SQL语句,以便在应用程序中执行数据库操作。然而,这两种方法在实现方式、性能和灵活性方面存在一…

【Linux】初识Linux和Linux环境配置

1.什么是Linux操作系统 说到电脑系统 我想有大多数人会脱口而出:windows、mac 是的,这也是如今市场上主流的两种操作系统。 但是对于IT相关的人士来说,还有一种系统也是必须有姓名 那就是Linux Linux,Linux Is Not UniX 的…