我有以下情况:我必须使用(目前)两种不同的策略来验证一个令牌,它们都做相同的事情(检查令牌是否有效),但方式不同。
我当前处理策略实例化的方式如下所示:
@Service
public class ValidationService {
private Map<ValidationType, ValidationStrategy> validationMap = new HashMap<>();
public ValidationService() {
validationMap.put(ValidationType.A, new AValidationStrategy());
validationMap.put(ValidationType.B, new BValidationStrategy());
}
public void validate(ValidationType type, String token) {
ValidationStrategy strategy = validationMap.get(type);
if(strategy == null) {
strategy = new NoValidationStrategy();
}
strategy.validate(token);
}
}
我的问题是:根据ValidationType枚举来设置正确的验证有没有更好的方法? 因为当系统中添加新的验证策略时,构造函数会越来越大。
我想也许我可以保留那张地图<>; ValidationService bean将由某种spring boot配置创建,但我不知道如何在spring boot实例化bean之后访问它。
如果你有更好的方法帮我! :)
PS:任何代码片段或有用的链接将非常感谢!
当然,一个选择是反思。 假设ValidationType是枚举,每个ValidationStrategy都可以将ValidationType定义为方法或通过注释。 然后您可以找到所有的ValidationStrategy并将它们分组到基于类型的映射中。 这将解决每次添加新的验证策略时都必须更新映射的问题。