(总结)设计模式

策略模式

代码模块

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);
相关推荐
Zane19942 天前
一个 new 就能创建对象,为什么还要拆出单例、工厂、建造者、原型四种模式?
设计模式
怕浪猫3 天前
一行命令复刻爆款视频,我把 Hypit 从安装跑到了出片
人工智能·设计模式·程序员
Zane19943 天前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19944 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式
她说..4 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
xiaofeiyang1504 天前
第六章 · 桥接 — 三支毛笔,画出九种颜色
设计模式
Shadow(⊙o⊙)5 天前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki6 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅666 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa6 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio