策略模式
代码模块
java
@Service
@RequiredArgsConstructor
public class TokenStatisticsService {
private final List<TokenUsageProvider> providers;
private final TokenStatisticsProperties properties;
private final Map<String, TokenUsageProvider> providerMap = new HashMap<>();
@PostConstruct
public void init() {
providers.forEach(p -> providerMap.put(p.getBizCode(), p));
}
private TokenUsageProvider getProviderByBizCode(String bizCode) {
return providerMap.get(bizCode);
}
核心1-自动注入
java
private final List<TokenUsageProvider> providers;
其中 TokenUsageProvider 是 interface接口类型。
javapublic interface TokenUsageProvider { String getBizCode();它的很多方法被很多实现类给实现了。
@RequiredArgsConstructor 这个注解相当于@Resource注解 将其中定义final的类自动注入
核心2-通过map去自动切换
java
private final Map<String, TokenUsageProvider> providerMap = new HashMap<>();
@PostConstruct
public void init() {
providers.forEach(p -> providerMap.put(p.getBizCode(), p));
}
private TokenUsageProvider getProviderByBizCode(String bizCode) {
return providerMap.get(bizCode);
}
1.首先要将自动注入进去的 规定好的interface类给遍历,填充进map
2.然后在业务中通过指定的key去获取到对应的实现类,但都由interface类统一接收(多态)
javaTokenUsageProvider provider = getProviderByBizCode(bizCode);