美文网首页
支付方式多变,怎么进化?

支付方式多变,怎么进化?

作者: 学姐角度 | 来源:发表于2020-12-03 21:24 被阅读0次

公司里的公众号要做支付功能,对接第三方支付,目前有微信支付、支付宝支付、京东支付。为了能够快速上线,需求了解清楚后我们就开始实现代码如下了:

@Service
public class PayService {

   public void pay(String payType){
       if("weixin".equals(payType)){
            this.weixinPay();
       } else  if("ali".equals(payType)){
            this.aliPay();
       }else if("jingdong".equals(payType)){
           this.jingdongPay();
       }
   }

   private  void weixinPay(){
       //todo 微信支付
   }

    private  void aliPay(){
        //todo 支付宝支付
    }

    private  void jingdongPay(){
        //todo 京东支付
    }
}

根据不同的支付方式,只需要在weixinPay(),aliPay(),jingdongPay()方法里面实现对应的逻辑即可。
由于每种支付方式的逻辑都不一样,为了赶进度,我们安排了3个人各自实现对应支付方式逻辑,这时就碰到一个问题:3个人修改的都是PayService这个文件,导致开发过程中经常有版本冲突,要不断进行代码合并,影响开发效率。
因此我们将各种支付方式独立为独立的实现类,代码如下:

@Service
public class WeixinPay  {

    public void pay() {
        //todo 微信支付
    }
}
@Service
public class AliPay  {

    public void pay() {
        //todo 支付宝支付
    }
}

@Service
public class JingdongPay {
    
    public void pay() {
        //todo 京东支付
    }
}

此时PayService代码调整为:

@Service
public class PayService {
    @Autowired
    private WeixinPay weixinPay;

    @Autowired
    private AliPay aliPay;

    @Autowired
    private JingdongPay jingdongPay;

   public void pay(String payType){
       if("weixin".equals(payType)){
           weixinPay.pay();
       } else  if("ali".equals(payType)){
           aliPay.pay();
       }else if("jingdong".equals(payType)){
           jingdongPay.pay();
       }
   }
}

现在解决了代码冲突的问题了,每种支付方式的负责人只要把自己负责的支付逻辑完成即可。但是下次如果再来个美团支付,要怎么做?是不是要加一个MeituanService,然后修改PayService中的pay方法,加个if("meituan".equals(payType))的判断?
可以看到这个if else的判断会越来越长,而且每次新增支付方式我们都要修改一次,违反了开闭原则。
我们来做个调整如下:
1,新建一个枚举类

public enum PayTypeEnum {
    WEIXIN, ALI, JINGDONG, MEITUAN
}

2,新建一个接口

@Service
public interface IPay {
    
    boolean supportPayType(String payType);
    
    void pay();
}

3,各支付方式实现该接口

@Service
public class WeixinPay implements IPay{

    @Override
    public boolean supportPayType(String payType) {
        return PayTypeEnum.WEIXIN.toString().equals(payType);
    }

    public void pay() {
        //todo 微信支付
    }
}
@Service
public class AliPay  implements IPay{

    @Override
    public boolean supportPayType(String payType) {
        return PayTypeEnum.ALI.toString().equals(payType);
    }

    public void pay() {
        //todo 支付宝支付
    }
}
@Service
public class JingdongPay implements IPay {

    @Override
    public boolean supportPayType(String payType) {
        return PayTypeEnum.JINGDONG.toString().equals(payType);
    }

    public void pay() {
        //todo 京东支付
    }
}
@Service
public class MeituanPay implements IPay {

    @Override
    public boolean supportPayType(String payType) {
        return PayTypeEnum.MEITUAN.toString().equals(payType);
    }

    public void pay() {
        //todo 美团支付
    }
}

3,payService实现

@Service
public class PayService implements ApplicationContextAware, InitializingBean {

    private ApplicationContext applicationContext;

    private List<IPay> iPayList;

    @Override
    public void afterPropertiesSet() throws Exception {
        if (!CollectionUtils.isEmpty(iPayList)) {
            return;
        }
        iPayList = new ArrayList<>();
        Map<String, IPay> iPayMap = applicationContext.getBeansOfType(IPay.class);
        for (Map.Entry<String, IPay> entry : iPayMap.entrySet()) {
            iPayList.add(entry.getValue());
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    public void pay(String payType) {
        for (IPay iPay : iPayList) {
            if (iPay.supportPayType(payType)) {
                iPay.pay();
            }
        }
    }
}

经过调整后,下次如果需要新增支付方式,只需要在枚举类中加一种类型,然后新增一个支付实现类实现IPay接口即可。

相关文章

  • 支付方式多变,怎么进化?

    公司里的公众号要做支付功能,对接第三方支付,目前有微信支付、支付宝支付、京东支付。为了能够快速上线,需求了解清楚后...

  • 整合积分红包话费流量,玩转多凭证支付流程

    引言 现代支付系统中,单一的现金支付方式已经不能满足多变的业务营销场景,因此有了以各类非现金支付方式(积分、红包、...

  • 在线支付相关概念

    支付方式 : 支付方式指消费时付款的方式,比如现金支付、货到付款、信用卡支付、借记卡支付、扫码支付等。 支付应用 ...

  • 更多变现方式

    酒店试住员 为旅店拍摄视频,照片 网红付款部分金额,作为入住费用 旅游线路,分段式旅游线路 ,照片,视频,网红直播...

  • 【外贸电商】如何提高速卖通上的收款量?

    速卖通速卖通上的支付方式无法满足买家的付款需求怎么办? 目前速卖通支持的支付方式有: 信用卡:Visa, Mast...

  • 德国为啥没有支付宝

    支付手段的进化,其实也带动了消费方式消费观念的改变。当你只有现金在口袋里用来消费的时候,花出去的钱,那是真的是钱。...

  • 生命起源到人类发展之生命的旅途

    我看到很多普通的小分子,后来由于特殊的环境,他们进化成了细胞,后来又不断进化,很多变成了化石,而后来的生命经历...

  • 第三方支付的一些专业名词概念

    支付方式指消费时付款的方式,比如现金支付、货到付款、信用卡支付、借记卡支付、扫码支付等。 支付应用指提供给最终用户...

  • 这个时代

    今年我23,生活在一个网络发达且迅速的科技时代。 在这个时代里,生活节奏迅速。支付方式和交流软件,不断进化。我们会...

  • 接口测试-soapui-根据excle数据自动生成xml请求

    背景: 测试一个通道所有的支付方式,一个支付方式一个接口 要求: 测试一个通道所有的支付方式 每个支付方式的部分参...

网友评论

      本文标题:支付方式多变,怎么进化?

      本文链接:https://www.haomeiwen.com/subject/fdtpwktx.html