(总结)设计模式

策略模式

代码模块

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);
相关推荐
希洛兔7 小时前
状态模式详解:让对象随内部状态自动改变行为
java·设计模式·状态模式
博风9 小时前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
4SAPI10 小时前
Provider Adapter设计模式:如何让AI应用支持多个模型
网络·人工智能·设计模式
geovindu12 小时前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式
高晶12 小时前
ARM 嵌入式 Linux 开发:从体系结构到 LED 点亮实战
设计模式·程序员
VimorphTech13 小时前
接入两套 TTS 接口后,业务代码如何避免堆满 if/else?
设计模式
geovindu15 小时前
rust: pool Pattern (续)
开发语言·后端·设计模式·rust·对象池简写模式
2302_805771071 天前
Day23:POM设计模式(封装)
java·开发语言·设计模式
范中勤2 天前
技术文档:模型工厂 `llm_provider` / `llm_use` 分层设计
设计模式·langchain·架构设计·模型工厂·llm_provider
浅尝辄止;3 天前
设计模式在HIS/LIS医疗系统中的完整实践指南(C#版)
开发语言·设计模式·c#