You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现按规则调用多API子集的StartAPI,可采用何种设计模式?

解决方案:使用策略模式(结合映射表实现)

要消除StartAPI中的if-else判断,最适合的方案是策略模式,通过构建参数与API执行逻辑的映射表,直接根据输入参数分发到对应的执行策略,彻底摆脱分支判断。

具体实现步骤

  1. 封装API执行逻辑
    先把各个独立API的调用逻辑封装成可复用的方法,方便后续组合:

    // 示例:单个API调用方法
    private void InvokeApiX() { /* API_X的调用逻辑 */ }
    private void InvokeApiZ() { /* API_Z的调用逻辑 */ }
    private void InvokeApiT() { /* API_T的调用逻辑 */ }
    private void InvokeApiY() { /* API_Y的调用逻辑 */ }
    private void InvokeApiU() { /* API_U的调用逻辑 */ }
    
  2. 构建策略映射表
    创建一个字典,将输入参数(如"string1")作为key,对应的API执行组合作为value(可以用委托、lambda表达式或实现了统一接口的策略类):

    // 初始化映射表,建议在程序启动时完成一次初始化
    private readonly Dictionary<string, Action> _apiStrategyMap = new()
    {
        ["string1"] = () => { InvokeApiX(); InvokeApiZ(); },
        ["string2"] = () => { InvokeApiX(); InvokeApiZ(); },
        ["string3"] = () => { InvokeApiX(); InvokeApiZ(); InvokeApiT(); },
        ["string4"] = () => { InvokeApiX(); InvokeApiZ(); InvokeApiT(); InvokeApiY(); InvokeApiU(); }
    };
    
  3. 简化StartAPI逻辑
    在StartAPI中,直接通过参数从映射表中取出对应的执行策略并执行,无需任何分支判断:

    public void StartAPI(string inputParam)
    {
        if (_apiStrategyMap.TryGetValue(inputParam, out var executionStrategy))
        {
            executionStrategy();
        }
        else
        {
            // 处理未匹配到参数的默认逻辑(如返回错误提示)
        }
    }
    

方案优势

  • 彻底消除if-else:代码结构更简洁,可读性更强
  • 符合开闭原则:新增参数规则时,只需在映射表中添加新的键值对,无需修改StartAPI的核心逻辑
  • 逻辑解耦:每个参数对应的API组合逻辑独立,便于单独维护、测试和扩展

如果后续需要处理更复杂的场景(如异步API调用、带参数的API执行),可以将策略封装为实现统一接口的类,这是标准策略模式的进阶用法,扩展性会更强。

内容的提问来源于stack exchange,提问作者Havyia Ayv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:41:03