公司的Auth服务使用了策略模式来实现对不同算法的动态处理,学习一下
先盗图一张,模式图如下
- 先定义一个Strategy接口
public interface AuthStrategy{
//用于动态匹配策略
match(str);
//执行鉴权操作
doAuth();
}
- 定义几个不同的实现类:
@Component
public class UserTokenStrategy implements AuthStrategy{
//...方法实现
}
@Component
public class TerminalTokenStrategy implements AuthStrategy{
//...方法实现
}
- 调用接口
@ Service("authService")
public class AuthServiceImpl implements AuthService {
@ Autowired//采用list注入所有的实现bean,也可以单个注入@Qualifier
private List<AuthStrategy> authStrategies;
@ Override
public void doAuth(String str) {
//遍历所有策略bean
for (AuthStrategy authStrategy : authStrategies) {
//根据需要找出对应的策略算法,并执行鉴权操作
if (authStrategy.match(str)) {
authStrategy.doAuth();
break;
}
}
}
一句话总结:定义一系列算法并可以互相替换。
生活中的例子:图片的格式、jpg/jepg,压缩文件的格式。
解决什么问题:做一件事情有很多种方法。
项目里面怎么用:1,购物车里面的付款方式;2,不同鉴权策略;3,不同的供应商或合作方
模式结构:声明一个顶级接口,定义一个策略方法,具体的实例都要实现这个接口。
框架里面使用:hibernate的主键生成策略。