(总结)设计模式

策略模式

代码模块

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接口类型。

java 复制代码
public 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类统一接收(多态)

java 复制代码
TokenUsageProvider provider = getProviderByBizCode(bizCode);
相关推荐
工一木子1 小时前
设计模式与生活⑩:地铁没变,你换了个状态
设计模式
是2的10次方啊4 小时前
设计模式与生活⑪:地铁里被打扰,别总靠自己硬扛
设计模式
高晶17 小时前
SPMI 控制器 RTL 设计与验证新手入门
设计模式·程序员·架构
geovindu1 天前
rust:N-Barrier Pattern
开发语言·后端·设计模式·rust·屏障模式·并发型模式
顧棟1 天前
OpenAPI 网关:鉴权 + 流量治理 一体化设计方案与实现
java·spring boot·设计模式
拆房老料1 天前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
是2的10次方啊1 天前
设计模式与生活⑩:地铁没变,你换了个状态
设计模式
步行cgn2 天前
适配器设计模式:一个“翻译官”的故事
设计模式
扶尔魔ocy2 天前
【QT C++】常用设计模式
c++·设计模式
她说..2 天前
常见设计模式-观察者模式
java·spring boot·spring·观察者模式·设计模式