策略模式的了解和工作中的案例
一:策略模式
指的是可以实现目标的方案集合,根据不同的入参,策略之间是可以相互替换的。
比如我们再登录某一个平台的时候,可以有多种登录方式( 用户名+密码,手机号+验证码,手机号+密码,或者第三方认证登录)这些登录方式即为不同的策略。
LoginType loginType = "登录方式";
if (loginType == 账号+密码) {
账号+密码登录的流程
} else if (loginType == 手机号+验证码) {
手机号+验证码的流程
} else if (loginType == 手机号+密码) {
手机号+密码的流程
} else if(loginType == 第三方认证){
微信/qq授权的流程
}else{
暂不支持的登录方式
}
如上代码,虽然写起来简单,但违反了面向对象的 2 个基本原则:
单一职责原则:一个类只有1个发生变化的原因,之后修改任何逻辑,当前方法都会被修改,维护比较麻烦。
开闭原则:对扩展开放,对修改关闭
当我们需要增加或减少某种登录方式时,不可避免的要修改该段代码,特别是当 if-else 块中的代码量比较大时,后续的扩展和维护会变得非常复杂且容易出错。针对上述问题我们可以采用设计模式解决,比如策略模式就很好的解决了此类问题。
二:策略模式的实现方式
1. 提供公共接口或抽象类,定义需要使用的策略方法。
2. 多个实现策略抽象类的实现类。
3. 环境类,对多个实现类的封装,提供接口类型的成员量。
4. 客户端 调用环境类 进行不同策略的切换。
案例
1:策略的定义(首先定义一个接口)
public interface OauthStrategyService<T> {
/**
* 授权策略
* @param loginUserDto
* @return
*/
ResponseVO oauthStrategy(LoginUserDtoRequest loginUserDto) throws BizException;
}