文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java使用策略模式实现聚石塔接口调用的问题

2024-04-02 19:55

关注

背景

有个业务需求对接淘宝开放平台。这里面涉及到了聚石塔,聚石塔是阿里系的一款产品,可以理解为一个服务器,淘宝开发平台一些较为敏感的数据,会要求发布进聚石塔。外部需要调用要通过走奇门网关。奇门中心也有详细描述。

研究了一下文档发现,需要写两套代码:

1、第一套适配聚石塔接口,发布在聚石塔内;

2、更新最新的SDK,放在第二套代码,通过SDK里面的奇门调用

写代码之前还需要在奇门中心配置好自定义api场景,并且规定好统一的入参以及响应

 重点!!聚石塔内,一个appKey在一个场景内,只能授权配置一个路由。而且用springmvc接收入参不能用@RequestBody,只能用HttpServletRequest。



    @RequestMapping("tower")
    public String tower(HttpServletRequest request) {
        // 逻辑
        return "";
    }

我们需要调用很多接口,每个接口的url,入参都不同,这怎么办呢?

我的处理方式是从统一的入参入手,定义了三个参数:

1)接口类型:type,用来判断走哪个url

2)授权参数:authParams,用来接收不同的授权入参

3)接口请求参数:reqParams,用来接收不同接口的不同入参

相当于一个controller方法要判断很多个接口


  
    @RequestMapping("tower")
    public String tower(HttpServletRequest request) {
        String type = request.getParameter("type");
        if ("1".equals(type)) {
            // 具体方法
        }
        if ("2".equals(type)) {
            // 具体方法
        }
        if ("3".equals(type)) {
            // 具体方法
        }
        if ("4".equals(type)) {
            // 具体方法
        }
        return "";
    }

解决方法

为了避免多重判断,而且有更好的扩展性,首选了策略模式来实现。

1、首先,定义一个策列模式接口,我这边主要以type来判断


public interface MethodStrategy {
 
    String selectMethod(String type, HttpServletRequest request);
}

2、然后有多少个接口就写多少个实现类,我这边拿一个实现类为例子


public class SmsCreateSignNameClient implements MethodStrategy {
    @Override
    public String selectMethod(String type, HttpServletRequest request) {
        // 获取授权参数
        String authStr = request.getParameter("authParams");
        // 获取接口请求参数
        String reqStr = request.getParameter("reqParams");
        // 这里写此接口具体的逻辑
    }
}

3、创建一个策略类的工厂,相当于总共记录有多少种类别。这里用strategyMap来存储。key建议用枚举类管理起来,代表接口方法,奇门调用时传type值时保持一致,value则为具体的实现类。


public class StrategyFactory {
 
    private static StrategyFactory factory = new StrategyFactory();
 
    private static Map strategyMap = new ConcurrentHashMap<>();
 
 
    static {
        // 短信相关,key建议用枚举类管理起来,代表接口方法,奇门调用时传type值时保持一致,value则为具体的实现类
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_SINGLE.getValue(), new SmsSendSingleClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_BATCH.getValue(), new SmsSendBatchClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_OAID.getValue(), new SmsSendOaIdClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_QUERY.getValue(), new SmsSendQueryClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_CREATE_URL.getValue(), new SmsCreateUrlClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_TEMPLATE_CODE_CREATE.getValue(), new SmsCreateTemplateCodeClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_TEMPLATE_CODE_QUERY.getValue(), new SmsTemplateCodeQueryClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_SIGN_NAME_QUERY.getValue(), new SmsSignNameQueryClient());
        strategyMap.put(TaoBaoEnums.SmsMethods.SEND_SIGN_NAME_CREATE.getValue(), new SmsCreateSignNameClient());
 
    }
 
    private StrategyFactory() {
    }
 
 
    public MethodStrategy getMethod(String type) {
        return (MethodStrategy) strategyMap.get(type);
    }
 
    public static StrategyFactory getFactory() {
        return factory;
    }
}

4、接着配置策略模式上下文


public class MethodContext {
 
    
    public String selectMethod(String type, HttpServletRequest request) {
        MethodStrategy methodStrategy = StrategyFactory.getFactory().getMethod(type);
        return methodStrategy.selectMethod(type, request);
    }
 
 
}

5、最后,在controller方法


    
    @RequestMapping("tower")
    public String tower(HttpServletRequest request) {
        String type = request.getParameter("type");
        MethodContext methodContext = new MethodContext();
        return methodContext.selectMethod(type, request);
    }

 写好所有实现类代码后,即可发布聚石塔

到此这篇关于Java使用策略模式实现聚石塔接口调用的文章就介绍到这了,更多相关Java聚石塔接口调用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯