设计模式-工厂模式

 工厂模式 

1、简单工厂

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

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

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

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

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

public abstract class AbstractUndoExecutor{
    //生成撤销SQL
    protected 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);

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

一旦有了新的

相关推荐

  1. 设计模式工厂模式

    2024-04-21 22:44:03       69 阅读
  2. 设计模式--工厂模式

    2024-04-21 22:44:03       53 阅读
  3. 设计模式 工厂模式

    2024-04-21 22:44:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 22:44:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 22:44:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 22:44:03       87 阅读
  4. Python语言-面向对象

    2024-04-21 22:44:03       96 阅读

热门阅读

  1. docker安装ubuntu桌面端

    2024-04-21 22:44:03       35 阅读
  2. 模拟器无法ADB链接的所有情况及解决方案

    2024-04-21 22:44:03       32 阅读
  3. Electron桌面应用开发:从入门到发布全流程解析

    2024-04-21 22:44:03       39 阅读
  4. 关于ContentProvider这一遍就够了

    2024-04-21 22:44:03       36 阅读
  5. 汽车网络安全 -- ECU会遭受黑客怎样的攻击?

    2024-04-21 22:44:03       34 阅读