首页 > 其他分享 >基于工厂模式和策略模式改造支付系统

基于工厂模式和策略模式改造支付系统

时间:2022-10-24 19:05:37浏览次数:38  
标签:基于 return String 改造 PayVO 模式 payVO payInfoVO public


1. vo

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PayVO {

/**
*支付类型: eg sendwyre
*/
private String payType;

/**
* 端类型,App/h5/pc
*/
private String clientType;

}

2. 支付策略

/**
* 支付策略 (在这里抽离公共的支付功能)
* @author
* @date 2022/5/25 21:26
*/
public interface PayStrategy {

/**
* 统一下单接口
* @param payInfoVO
* @return
*/
String unifiedOrder(PayVO payVO);


/**
* 退款接口
* @param payInfoVO
* @return
*/
default String refund(PayVO payVO){ return ""; }




}

3. 支付工厂

/**
* 支付工厂
* @author:
* @date: 2022/09/14 21:26
*/
@Slf4j
@Component
public class PayFactory {

@Autowired
private CheckOutPayStrategy checkOutPayStrategy;

@Autowired
private SendWyrePayStrategy sendWyrePayStrategy;

/**
* 创建支付,简单工厂模式
* @param payVO
* @return
*/
public String pay(PayVO payVO){

String payType =payVO.getPayType();

if (PayType.sendwyre.getName() == payType) {
//支付宝支付
PayStrategyContext payStrategyContext = new PayStrategyContext(sendWyrePayStrategy);
return payStrategyContext.executeUnifiedOrder(payInfoVO);

} else if(PayType.checkout.name().equals(payType)){

// checkout
PayStrategyContext payStrategyContext = new PayStrategyContext(checkOutPayStrategy);
return payStrategyContext.executeUnifiedOrder(payInfoVO);
}
return "";
}




/**
* 退款接口
* @param payVO
* @return
*/
public String refund(PayVO payVO){

String payType = payVO.getPayType();



return "";
}




}

4. 支付策略上线文

import io.pay.vo.PayVO;

/**
* 支付策略
* @author:
* @date: 2022/09/14 21:26
*/

public class PayStrategyContext {

private PayStrategy payStrategy;

public PayStrategyContext(PayStrategy payStrategy){
this.payStrategy = payStrategy;
}


/**
* 根据策略对象,执行不同的下单接口
* @return
*/
public String executeUnifiedOrder(PayInfoVO payInfoVO){

return payStrategy.unifiedOrder(payInfoVO);
}



/**
* 根据策略对象,执行不同的退款接口
* @return
*/
public String executeRefund(PayInfoVO payInfoVO){

return payStrategy.refund(payInfoVO);
}




}

5. checkout 支付策略

@Service
@Slf4j
public class CheckOutPayStrategy implements PayStrategy {

@Override
public String unifiedOrder(PayVO payVO) {
return null;
}

@Override
public String refund(PayVO payVO) {
return null;
}


}

6. sendWyre 支付策略

@Service
@Slf4j
public class SendWyrePayStrategy implements PayStrategy {


@Override
public String unifiedOrder(PayVO payVO) {

return "";
}

@Override
public String refund(PayVO payVO) {
return null;
}


}

标签:基于,return,String,改造,PayVO,模式,payVO,payInfoVO,public
From: https://blog.51cto.com/u_4981212/5790933

相关文章

  • 【基于hutool工具类封装雪花算法实现的工具类】
    importcn.hutool.core.lang.Snowflake;importcn.hutool.core.util.IdUtil;/***基于hutool工具类封装雪花算法实现的工具类*@author*@date2022年5月20日16:56:21*......
  • 基于ssm工商学院办公用品管理信息系统设计与实现-计算机毕业设计源码+LW文档
    摘 要本高校科研管理系统设计目标是实现高校科研管理的信息化管理,提高管理效率,使得高校科研管理工作规范化、科学化、高效化。本文研究的高校科研管理系统基于SSM架构,采......
  • 设计模式总览
    设计模式是什么?在软件工程中,设计模式(DesignPattern)是对软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。......
  • SQL Server DB 基于多核CPU的设置
    SQLServerDB基于多核CPU的设置 随着多核CPU的普及,SQLSERVER在处理并发情况会碰到这样一个情况:一旦有个复杂查询占用了CPU,则所有的CPU都会被Block住,导致S......
  • 基于ads1299神经信号采集之调试总结和备忘
    前记 ads129x系列芯片在生理信号采集这块应用十分广泛,也是一个不可或缺的芯片。最近几个项目用到它,算是从一个陌生到熟悉的过程吧,这个过程踩过不少坑,中间经历过很多比较......
  • 基于Mixin扩展类和GenericAPIView实现接口
    基于Mixin扩展类和GenericAPIView实现接口10.1扩展类简介(1)ListModelMixin列表视图扩展类,提供list(request,*args,**kwargs)方法快速实现列表视图,返回200状态码。该......
  • 基于视图子类实现接口
    基于视图子类实现接口11.1视图子类介绍(1)CreateAPIView提供post方法继承自:GenericAPIView、CreateModelMixin(2)ListAPIView提供get方法继承自:GenericAPIView......
  • 基于视图集实现接口
    基于视图集实现接口12.1视图集的简介使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:list()提供一组数据retrieve()提供单个数据create()创建数据upd......
  • JavaScript 设计模式之策略模式
    什么是设计模式?为什么需要学习设计模式?学习设计模式的目的是:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工......
  • 浅析 Dapr 里的云计算设计模式
    Dapr实际上是把分布式系统与微服务架构实践的挑战以及k8s这三个主题的全方位的设计组合,特别是Kubernetes设计模式一书作者BilginIbryam提出的Multi......