(总结)设计模式

策略模式

代码模块

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);
相关推荐
码匠许师傅9 小时前
【设计模式精讲】14.外观模式(Facade)
c++·设计模式·uml·外观模式
evans在进步11 小时前
Java 常用设计模式(二):装饰器、适配器、责任链、模板方法、策略与观察者
java·开发语言·设计模式
码匠许师傅14 小时前
【设计模式精讲】13.装饰器模式(Decorator)
c++·设计模式·uml·装饰器模式
evans在进步1 天前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
字节跳动开源2 天前
VisActor全新图可视化开源项目:VGraph
前端·设计模式·开源
码匠许师傅2 天前
【设计模式精讲】11.桥接模式(Bridge)
c++·设计模式·桥接模式·uml
学习星球3 天前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
码匠许师傅4 天前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
码匠许师傅4 天前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式