支付业务实战对复杂if else 判断的优化

简介: 支付业务实战对复杂if else 判断的优化

背景

最近在做项目的时候,需要接入支付。由于接入第三方支付而且还不知止一家,需要接入很多家。比如说支付宝、微信、富友支付等。每家支付都一个回调。现如今的代码,根据不同的第三方支付一大堆else if判断。现如今代码如下:

 public PayResponse pay(PayRequestType payRequestType) {
        PayTypeEnum payType = PayTypeEnum.para(payRequestType.getPayType());
        if (payType == PayTypeEnum.ALIPAY) {
            return alipayService.pay(payRequestType);
        } else if (payType == PayTypeEnum.WEIXIN) {
            return weixinPayService.pay(payRequestType);
        } else if (payType == PayTypeEnum.LIANLIAN) {
            return lianlianPayService.pay(payRequestType);
        }
        // 其他支付方式
        return null;
    }

如果以后要接入其他的支付方式,然后就要接着else if 往下写,如果十几家怎么办?所以这个要进行优化。

优化步骤

  1. 创建一个支付接口,提供两个方法 <br/>
public interface Pay {

    PayResponse pay(PayRequestType payRequestType);

    /**
     * 每家支付方式对应的类型
     * @return
     */
    PayTypeEnum getPayType();
}```
每家支付都去实现这个类:比如微信支付

@Component
public class WeixinPayService implements Pay {

@Override
public PayResponse pay(PayRequestType payRequestType) {
    return null;
}

@Override
public PayTypeEnum getPayType() {
    return PayTypeEnum.WEIXIN;
}
然后准备一个工厂把那些判断if else 消除掉

public final class PayFactory {

private PayFactory() {
}
public static Map<PayTypeEnum, Pay> PAYMAP = new ConcurrentHashMap();
static {
    Map<String, Pay> beansOfType = ApplicationContextHelper.getBeansOfType(Pay.class);
    for (Map.Entry<String, Pay> entry : beansOfType.entrySet()) {
        Pay pay = entry.getValue();
        PAYMAP.put(pay.getPayType(), pay);
    }
}

public static Pay getPay(PayTypeEnum payTypeEnum){
    return  PAYMAP.get(payTypeEnum);
}
spring获取bean帮助类

@Component
public class ApplicationContextHelper implements ApplicationContextAware {

public static ApplicationContext applicationContext;

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
}
public static  <T> T getBean(Class<T> clazz) {
    return applicationContext.getBean(clazz);
}

public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
    return applicationContext.getBeansOfType(clazz);
}
## 优化后代码
类型枚举新增一个枚举转换方法

public enum PayTypeEnum {

WEIXIN, LIANLIAN, ALIPAY;

public static PayTypeEnum para(String type){

    for(PayTypeEnum payTypeEnum:PayTypeEnum.values()){
        if(type.equalsIgnoreCase(payTypeEnum.name())){
            return  payTypeEnum;
        }
    }
    return null;
}

}

public PayResponse pay2(PayRequestType payRequestType) {

    PayTypeEnum payType = PayTypeEnum.para(payRequestType.getPayType());
   return PayFactory.getPay(payType).pay(payRequestType);
}
后续新增支付方式的话,只要新增枚举类型、然后实现pay接口就可以了。没有了复杂的if else 判断了。
##  总结
目录
相关文章
|
18天前
|
安全 API 数据安全/隐私保护
商品详情API接口的优势分析与应用价值
在数字化时代,商品详情API接口为商家和开发者提供了实时更新、高效集成、丰富功能、安全稳定、易于扩展及提升用户体验的解决方案,助力提高运营效率、降低成本并增强市场竞争力。
|
16天前
|
供应链 监控 安全
分享一些成功保障淘宝详情接口调用安全性的实践案例
以下是一些成功保障淘宝详情接口调用安全性的实践案例: 1. **智能库存管理系统**:通过密钥管理、规范调用和数据加密等措施,实现高效库存管理,降低库存成本,确保接口调用安全。 2. **个性化推荐引擎**:采用数据过滤、通信安全和定期审计等手段,提升用户体验和销售额,保障用户数据安全。 3. **电商数据分析平台**:实施访问控制、日志管理和安全培训,稳定获取商品详情数据,为商家提供可靠市场分析,保障数据安全。
分享一些成功保障淘宝详情接口调用安全性的实践案例
|
3月前
|
编解码
重构支付宝商家账单问题之在重构过程中,替换老账单如何操作
重构支付宝商家账单问题之在重构过程中,替换老账单如何操作
|
4月前
|
前端开发 开发工具 数据库
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
|
4月前
|
数据采集 供应链 监控
ERP系统中的库存周转率计算与优化解析
【7月更文挑战第25天】 ERP系统中的库存周转率计算与优化解析
137 0
|
6月前
|
消息中间件 架构师 NoSQL
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
|
6月前
|
供应链 监控 搜索推荐
实时数据驱动:API商品数据接口的三重保证,助力您的业务飞跃
在当今快节奏、不断演变的商业世界中,企业如何能够迅速应对市场的瞬息万变?答案无疑是通过有效管理和应用数据资产。本文将带您深入理解API商品数据接口如何激活这些资产,并确保您的企业在市场竞争中始终保持领先。
|
新零售 人工智能 供应链
链动2+1开发运营版丨链动2+1系统开发案例详情/方案项目/功能说明/逻辑规则/源码程序
新零售是指传统零售业与互联网技术相结合,通过数字化、数据化和智能化的手段,重新定义和升级传统零售业态的模式和经营方式。
|
11月前
怎么做问答推广?问答营销的步骤和逻辑
怎么做问答推广?问答营销的步骤和逻辑
|
Java Spring
统计业务方法耗时【项目 商城】
统计业务方法耗时【项目 商城】
114 0
统计业务方法耗时【项目 商城】