公司的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;
}
}
}