mybaties中使用的设计模式

一、创建型模式

工厂模式

应用场景:SqlSessionFactory 负责创建 SqlSession(数据库会话),通过不同参数生成不同配置的实例。例如,DefaultSqlSessionFactory 根据事务隔离级别、自动提交等参数构建会话对象。

实现方式:通过抽象工厂接口定义创建逻辑,子类实现具体对象的实例化。

单例模式

应用场景:Configuration 类作为全局配置中心,通过 getInstance() 方法确保唯一实例,避免重复加载配置。

其他示例:ErrorContext(错误上下文)和 LogFactory(日志工厂)也采用单例模式。

建造者模式

应用场景:SqlSessionFactoryBuilder 通过逐步解析 XML 配置(如 XMLConfigBuilder)构建复杂的 Configuration 对象,最终生成 SqlSessionFactory。

核心类:XMLMapperBuilder 和 XMLStatementBuilder 用于解析 SQL 映射文件并构建对象树。

二、结构型模式

代理模式

应用场景:Mapper 接口的代理实现,如 MapperProxy 使用 JDK 动态代理,将接口方法调用转发为 SQL 执行。

延迟加载:executor.loader 包通过 CGLIB 或 Javassist 实现延迟加载的代理对象。

组合模式

应用场景:动态 SQL 的 SqlNode 接口(如 IfSqlNode、TrimSqlNode)将 SQL 片段组合成树形结构,递归解析生成完整 SQL。

核心逻辑:apply() 方法统一处理单个节点与节点组合,支持条件判断、循环等复杂逻辑。

适配器模式

应用场景:日志模块适配不同日志框架(如 Log4j、SLF4J),通过 Log 接口统一调用,屏蔽底层差异。

实现类:Log4jImpl、Slf4jImpl 等适配器类实现日志接口。

装饰器模式

应用场景:缓存模块通过 Cache 接口的装饰器链(如 LruCache、ScheduledCache)动态添加缓存策略。

示例:TransactionalCache 装饰器为缓存添加事务支持。

三、行为型模式

模板方法模式

应用场景:BaseExecutor 定义 SQL 执行流程(如查询、提交事务),子类 SimpleExecutor 实现具体步骤(如 doQuery())。

扩展性:通过重写模板方法支持不同执行策略(如批量处理、复用 Statement)。

策略模式

应用场景:动态 SQL 的条件处理(如 IfSqlNode 根据参数值选择是否包含 SQL 片段)。

其他示例:TypeHandler 根据数据类型选择不同的处理策略。

迭代器模式

应用场景:PropertyTokenizer 解析属性表达式(如 user.address.street),按层级迭代访问属性。

相关推荐
workflower1 天前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
折哥的程序人生 · 物流技术专研1 天前
Java 23 种设计模式:从踩坑到精通 | 抽象工厂 —— 支付/收款如何成套创建?跨平台 UI 如何一键换肤?
java·开发语言·后端·设计模式
老码观察1 天前
设计模式实战解读(八):代理模式——控制访问的隐形中间层
设计模式·代理模式
我爱cope1 天前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展
geovindu1 天前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式
我爱cope1 天前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
nnsix1 天前
设计模式 - 迭代器模式 笔记
笔记·设计模式·迭代器模式
geovindu1 天前
go: Bounded Parallelism Pattern
开发语言·后端·设计模式·golang·有界并行模式
IT策士1 天前
第 23篇 k8s之Pod:多容器 Pod 与设计模式(Sidecar 等)
设计模式·容器·kubernetes
qq_297574672 天前
设计模式系列文章(基础篇第 11 篇):模板方法模式——定义算法骨架,实现代码复用与流程统一
算法·设计模式·模板方法模式