一、策略模式介绍
策略模式(Strategy Design Pattern) ,行为型设计模式。
策略模式定义:针对一组提供有相同算法的类进行归类封装,使用者无需关注类的创建过程和实现过程,只需要指定特定算法和入参数即可完成相关计算操作。
二、策略模式使用模板
场景:字符串加密算法策略模式实现
在应用开发中,字符串的加密场景随处可见,比如:密码,数据加密,敏感数据处理等。针对这些算法,可以使用 策略模式进行统一规范,规范使用流程和简化使用操作。
2.1、统一字符加解密规范
2.2、算法实现
算法实现有很多种,以 Md5 、AES、字符敏感信息处理为例。
Md5 实现如下:![[设计模式]-[行为型]-策略-介绍及应用 - 图2](/uploads/projects/it-learn@java-base/988c9911f49852cb6769cfbdf97870d7.webp)
AES 实现如下:![[设计模式]-[行为型]-策略-介绍及应用 - 图3](/uploads/projects/it-learn@java-base/46052438ec7fab468680495a9d552266.webp)
字符敏感实现如下:![[设计模式]-[行为型]-策略-介绍及应用 - 图4](/uploads/projects/it-learn@java-base/fd25aa525984bf89dfedab15ba304816.webp)
上述字符串算法特点:都实现了统一的接口规范 IStringEnOrDecryption。
2.3、策略方法实现
进行算法选择策略实现如下:![[设计模式]-[行为型]-策略-介绍及应用 - 图5](/uploads/projects/it-learn@java-base/d62028235650d4a63aaeb2f1faa4469c.webp)
通过枚举的方式,实现策略的选择和方法调用
2.4、使用案例
![[设计模式]-[行为型]-策略-介绍及应用 - 图6](/uploads/projects/it-learn@java-base/ab65e6731e7418641a4903456312ede5.webp)
枚举本身就是 JVM 级别的单例,通过单例进行实例,然后直接使用枚举的方式进行调用,而无需关注算法对象的构建和具体实现。
三、Mybatis 中的策略模式
在 Mybatis 中核心层处理 SQL 操作由 Executor 执行器完成。
在 Mybatis 中存在多种 Executor 实现,如下:![[设计模式]-[行为型]-策略-介绍及应用 - 图7](/uploads/projects/it-learn@java-base/e5325c661c8f367f4ace6dcfc99647db.webp)
多种 Executor 执行器,意味着使用的时候需要进行选择,Mybatis 使用策略模式提供了策略方法来实现 Executor 的选择。
在使用过程中,无需关注 Executor 的创建,只需要传入需要的执行器类型,即可获取到相应的执行器实例,相关代码实现如下:![[设计模式]-[行为型]-策略-介绍及应用 - 图8](/uploads/projects/it-learn@java-base/ee5ef6893f3a3409a6ad13f62a21cec9.webp)
【公众号】花好夜猿
![[设计模式]-[行为型]-策略-介绍及应用 - 图1](/uploads/projects/it-learn@java-base/2855de677d8062a32d2c5219eb601430.webp)
