首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于策略模式实现对渠道的路由

基于策略模式实现对渠道的路由

原创
作者头像
路行的亚洲
发布于 2022-07-18 10:56:38
发布于 2022-07-18 10:56:38
64000
代码可运行
举报
文章被收录于专栏:后端技术学习后端技术学习
运行总次数:0
代码可运行

首先将需要路由的渠道信息采用map进行封装,这样的话,可以在使用的时候基于特定的策略进行路由。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class PayContextStrategy {private static  final String aliPay ="10001";private static  final String yinlian ="10002";//容器: map
    private static Map<String, PayStrategy> strategyMap = new ConcurrentHashMap<>();
    //静态块 : static
    static {
        strategyMap.put(aliPay, new AliPayStrategy());
        strategyMap.put(yinlian, new YinLianPayStrategy());
    }//获取实例对象
    public static PayStrategy getInstance(String code) {
        return strategyMap.get(code);
    }
    
    public String toPay(String payCode){
        PayStrategy payStrategy = getInstance(payCode);
        if(payStrategy==null){
            return  "没有该渠道信息";
        }
        return  payStrategy.toPay();
    }
}

优化:可以将渠道信息放在枚举中,然后放入到map中。

支付宝渠道服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class AliPayStrategy   implements PayStrategy {
    public String toPay() {
        return "调用支付宝支付接口...";
    }
}

银联渠道支付服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 银联支付
 */
@Component
public class YinLianPayStrategy implements PayStrategy {
    public String toPay() {
        return "调用银联支付接口...";
    }
}

进行调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class PayController {
    @Autowired
    private PayContextStrategy payContextStrategy;
    @RequestMapping("/toPay")
    public  String toPay(String payCode){
        if(StringUtils.isEmpty(payCode)){
            return "渠道code不能为空!";
        }
        return payContextStrategy.toPay(payCode);
    }}

当然在调用具体的业务时,策略调用放在service业务里面

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档