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

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

前言

通过之前对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设计模式总结

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值