Mybatis源码学习(八)Mybatis设计模式总结

本文深入剖析Mybatis源码中的六大设计模式:工厂模式、建造者模式、适配器模式、装饰器模式、模板模式及代理模式。通过具体实例如数据源工厂、MappedStatement.Builder、日志模块适配器、缓存装饰器、BaseExecutor模板和ConnectionLogger代理,展现Mybatis框架如何巧妙运用设计模式提升代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

通过之前对mybatis源码的学习,我们可以看见mybatis采用了很多设计模式,使代码变得优雅简洁(逼格高),我们一起来学习下它设计模式的使用吧.

设计模式菜鸟教程

1.工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
mybatis的数据源模块中创建数据源就是使用的工厂模式.数据源工厂并不暴露创建数据源的逻辑,只是提供创建的接口.
在这里插入图片描述

2.建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
MappedStatement.Builder
在这里插入图片描述
Discriminator.Builder
在这里插入图片描述

3.适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
mybatis的日志模块就是适配器模式的实现的.mybatis定义了日志的接口Log
它的实现类通过适配器模式集成的其他插件的日志功能.例如Log4jImpl等
在这里插入图片描述
在这里插入图片描述

4.装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
mybatis的缓存功能是装饰器模式最佳实践.
Cache接口的每个实现类都在提供缓存的基础上增加了额外的功能.
缓存的核心功能由内部的代理实现.例如LoggingCache就是增加了日志打印功能.
LruCache就是增加了LRU算法的实现,对单纯的缓存进行了装饰,增加了LRU功能.
在这里插入图片描述
在这里插入图片描述

5.模板模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
mybatis的BaseExecutor就是使用了模板模式.它定义了query,queryCursor,update等方法的执行流程.但是具体的实现doUpdate,doQuery等需要子类实现
在这里插入图片描述

6.代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
ConnectionLogger就是完成了对Connection的代理.对他的prepareStatement和prepareCall还有createStatement等方法进行增强,增加了日志打印,还有生成了动态代理对象的PreparedStatement
在这里插入图片描述

总结

今天我们学习了mybatis中关于设计模式的实现.可见优秀的框架从不缺乏设计模式的身影.
大家在mybatis中还发现了哪些设计模式的身影呢,一起留言讨论吧.

喜欢的小伙伴请动动小手关注和点赞吧,也可留言一起探讨怎样更好的学习源码!!!

mybatis带中文注释源码地址

github地址

文章链接

Mybatis源码学习(一)初探执行流程
Mybatis源码学习(二)配置文件解析到SqlSessionFactory构建
Mybatis源码学习(三)SqlSession详解
Mybatis源码学习(四)自定义Mapper方法执行流程
Mybatis源码学习(五)Executor和StatementHandler详解
Mybatis源码学习(六)结果集自动封装机制
Mybatis源码学习(七)mybatis缓存详解
Mybatis源码学习(八)Mybatis设计模式总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值