设计模式-工厂模式

devtools/2024/10/24 2:26:28/

 工厂模式 

1、简单工厂

简单工厂比较简单,它的作用就是把对象的创建放到一个工厂类中,通过参数来创建不同的对象。

在分布式事务框架Seata中,如果发生异常,则需要进行二阶段回滚。

它的过程是,通过事务id找到undoLog记录,然后解析里面的数据生成SQL,将一阶段执行的SQL给撤销掉。

问题是SQL的种类包含了比如INSERT、UPDATE、DELETE,所以它们反解析的过程也不一样,就需要不同的执行器去解析。

在Seata中,有一个抽象的撤销执行器,可以生成一条SQL。

public abstract class AbstractUndoExecutor{//生成撤销SQLprotected abstract String buildUndoSQL();
}

然后有一个获取撤销执行器的工厂,根据SQL的类型,创建不同类型的执行器并返回。

public class UndoExecutorFactory {public static AbstractUndoExecutor getUndoExecutor(String dbType, SQLUndoLog sqlUndoLog) {switch (sqlUndoLog.getSqlType()) {case INSERT:return new MySQLUndoInsertExecutor(sqlUndoLog);case UPDATE:return new MySQLUndoUpdateExecutor(sqlUndoLog);case DELETE:return new MySQLUndoDeleteExecutor(sqlUndoLog);default:throw new ShouldNeverHappenException();}}
}

使用的时候,直接通过工厂类获取执行器。

AbstractUndoExecutor undoExecutor = UndoExecutorFactory.getUndoExecutor(dataSourceProxy.getDbType(),sqlUndoLog);
undoExecutor.executeOn(conn);

简单工厂模式有个小小的缺点:

一旦有了新的


http://www.ppmy.cn/devtools/8950.html

相关文章

node端导出excel-用请求排队来限流

需求 有一个会执行luckySheet脚本并且导出excel的node接口,会在每天凌晨执行,但是文件过大时会内存溢出 之前有用worker来实现多线程(主要是避免变量污染),但这样只能保证主线程不卡死,几个子线程合起来占用…

20240420

docker 使用不添加sudo前缀 确认group: getent group如果没有docker组:sudo groupadd docker添加用户到docker组: sudo usermod -aG docker freja重启docker: sudo systemctl restart docker测试后依旧报错,如果是还是…

PHP反序列化漏洞原理(附带pikachu靶场演示)

1.反序列化概念 序列化:是将变量转换为可保存或传输的字符串的过程;实现函数是serialize()反序列化:就是在适当的时候把这个字符串再转化成原来的变量使用,就是序列化的逆过程。实现函数是unserialize() 直白一点就是:序列化是把对象转换成字节流&#…

【码农圈子】想加免费的程序员微信群的看过来

群名:码农圈子 很多人后台反应,最近有没有免费的微信技术交流社群 。今天特意写一篇文章来创建一些只有程序猿的微信群。(广告党慎入!) 这些微信技术群都是完全免费,后续也不会收取任何费用 。 群规则 …

java体育馆使用预约平台的设计与实现(springboot+mysql源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体育馆使用预约平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 体育馆使用预约平台的…

3d世界坐标转换到某个二维平面。

有个功能需要截取某个平面的点云数据,然后计算宽高。需要将3d点投影到二维平面上。 //将3d坐标点转换为2d/*** 法向量(A, B, C)* 常量D* 原点x0,y0,z0* 方向向量(vx, vy, vz)* 投影点(x,y,z)* public static double[] Convert3DPointTo2D(double A, double B, doub…

SLD60N02T美浦森20V 60A N沟道 MOS管

品牌:美浦森 型号:SLD60N02T VDS: 20V IDS :60A 封装:TO-252 沟道:N沟道 其他产品推荐: SLN30N03T 品牌:美浦森 电压:30V 电流:30A 封装:DFN33-8 N沟道 SLN3…

自学新标日第十二课(完结)

第十二课 单词 单词假名声调词义季節きせつ季节冬ふゆ2冬天秋あき1秋天夏なつ2夏天春はる1春天日本料理にほんりょうり4寿司すし2寿司ナシ2梨バナナ1香蕉ミカン1橘子焼酎しょうちゅう3烧酒日本酒にほんしゅ0日本酒紅茶こうちゃ0…