一个支付案例,学会策略模式!
Java之间
共 5723字,需浏览 12分钟
·
2021-04-14 11:46
往期热门文章:
1、面试被问事务注解 @Transactional 失效怎么解决? 2、CTO 说了,用错 @Autowired 和 @Resource 的人可以领盒饭了 3、在项目中用了Arrays.asList、ArrayList的subList,被公开批评 4、这六个 MySQL 死锁案例,能让你理解死锁的原因! 5、别总写代码,这130个网站比涨工资都重要
一、支付案例
1.普通代码
@PostMapping("/makeOrder")
public ResultData makeOrder(@RequestBody Order order){
// 生成自己的订单,并且设置订单的失效时间,并且定时回滚
// ... 此处代码省略
// 处理支付方式
if(order.getType=="alipay"){ // 支付宝
this.payService.alipay(order);
}else if (order.getType=="weixin"){ // 微信
this.payService.weixinpay(order);
}else if (order.getType=="jd"){ // 京东支付
this.payService.jtpay(order);
}else if (order.getType=="yunshanfu"){ // 云闪付
this.payService.yunshanfupay(order);
}
// 发送到mq,进行广播。
return this.ok(order);
}
@PostMapping("/alipay")
public ResultData makeOrder(@RequestBody Order order){
}
@PostMapping("/jdpay")
public ResultData makeOrder(@RequestBody Order order){
}
2.引入策略模式
private OrderService orderService;
@PostMapping("/makeOrder")
// 商品id
// 支付类型
public ResultData makeOrder(Long goodsId,String type){
// 生成本地的订单
Order order = this.orderService.makeOrder(goodsId);
//选择支付方式
PayType payType = PayType.getByCode(type);
//进行支付
payType.get().pay(order.getId(),order.getAmount());
return this.ok();
}
public enum PayType {
//支付宝 AliPay 是实现类
ALI_PAY("1",new AliPay()),
//微信
WECHAT_PAY("2",new WechatPay());
private String payType;
// 这是一个接口
private Payment payment;
PayType(String payType,Payment payment){
this.payment = payment;
this.payType = payType;
}
//通过get方法获取支付方式
public Payment get(){ return this.payment;}
public static PayType getByCode(String payType) {
for (PayType e : PayType.values()) {
if (e.payType.equals(payType)) {
return e;
}
}
return null;
}
}
public interface Payment {
public void pay(Long order, double amount);
}
public class AliPay implements Payment {
@Override
public void pay(Long order, double amount) {
System.out.println("----支付宝支付----");
System.out.println("支付宝支付111元");
}
}
public class WechatPay implements Payment {
@Override
public void pay(Long orderId, double amount) {
System.out.println("---微信支付---");
System.out.println("支付222元");
}
}
最近热文阅读:
1、终于来了,IDEA 2021.1版本正式发布,完美支持WSL 2 2、面试被问事务注解 @Transactional 失效怎么解决? 3、CTO 说了,用错 @Autowired 和 @Resource 的人可以领盒饭了 4、在项目中用了Arrays.asList、ArrayList的subList,被公开批评 5、别总写代码,这130个网站比涨工资都重要 6、哇!IntelliJ IDEA 2021.1 中竟然有这么多牛逼的插件~ 7、能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮,真TMD香! 8、放弃 Notepad++,事实证明,还有 5 款更牛逼…… 9、公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效! 10、Spring 中经典的 9 种设计模式!收藏了 关注公众号,你想要的Java都在这里
评论