点击关注公众号,Java干货及时送达

作者 | 叁滴水

来源 | https://blog.csdn.net/qq_30285985/

前言

在开发时,总会遇到支付的需求,但是支付的方式有很多,支付宝支付,微信支付,银行卡支付,每种支付方式的接口不一样,参数信息也不一样,一般情况下,会有很多if/else来进行判断,但是业务逻辑的逐渐增多,if/else显得那么的沉重,通过策略模式即可更优雅的来处理这种代码。

什么是策略模式呢?比如一个人要从广州去北京,这个人可以选择乘坐飞机去,也可以选择乘坐火车去。两种交通方式的选择,可以认为是两种策略。映射到程序中,可以认为是两种算法,比如支付的时候,选择支付宝支付或者微信支付。

策略模式的特点是不管过程怎么样,结果都是一样的。不管乘坐飞机还是火车,最后都会到达北京;不管哪种支付方式,最终都会支付成功。过程不一样,结果都一样。

一、支付案例

支付时,会有很多参数,很多逻辑,经常会遇到一种支付方式,上百行的代码,而且还需要很好的把控事务。如果多种支付方式,代码也会成倍的上涨。维护起来相当难受。

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);
}

相信代码肯定会很多,而且if/else来处理会显得代码很杂乱。或者有通过增加接口来减少if/else

@PostMapping("/alipay")
public ResultData makeOrder(@RequestBody  Order order){}
@PostMapping("/jdpay")
public ResultData makeOrder(@RequestBody  Order order){}

现在逻辑少,代码不会显得杂乱,如果有很多种支付方式呢?代码会显得很杂乱,而且扩展受限。推荐阅读:最新 Java 核心技术教程。

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 {@Overridepublic void pay(Long order, double amount) {System.out.println("----支付宝支付----");System.out.println("支付宝支付111元");}
}

代码如下(微信支付实现):

public class WechatPay implements Payment {@Overridepublic void pay(Long orderId, double amount) {System.out.println("---微信支付---");System.out.println("支付222元");}
}

通过枚举来优雅的选择支付类型,共用一个支付接口,不同的支付方式实现自己的逻辑,更加贴合面向对象的思想。这种方式相对与if/else更加优雅。单例模式的 8 种写法,推荐看下。

但是,其实这样一看,哇,使用策略模式,创建了好多类,好麻烦的样子,还是使用if/else代码少一点,但是长远来说,支付的逻辑一定是错综复杂,通过策略模式可以更加友好的进行扩展。但是if/else进行扩展,代码会比较冗余,如果本来就没几行代码,缺强制使用策略模式,无意是画蛇添足。

热门内容:
再见,HttpClient!再见,Okhttp!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

一个支付案例,学会策略模式!相关推荐

  1. java策略模式案例_java策略模式典型案例

    java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...

  2. 知识众筹第9期 一个经典案例学会数据分析 | 开始分红报名

    什么是知识众筹?投资者选择自己看好的知识分享项目,并与知识分享者一起享受项目分红. 本期项目邀请了猴子数据分析社群会员.成功将数据分析技术应用在工作中,实现了工作效率提升的王承顺. 王承顺毕业于北京科 ...

  3. 支付服务代码设计(策略模式,可扩展,接入方便)

    最近一直在深入学习一些知识,整理出一些东西一直没有时间写出来,后续会慢慢总结一下写在博客上,对于博客还是不想专门写知识点,总结和提升终究是为了自己,写出来的博客为了让别人看的好,更为了自己的成长和记录 ...

  4. 高级UI- 属性动画炫酷动画案例+淘宝动画+源码解析+策略模式使用

    文章目录 属性动画源码: 案例1 案例2 最终效果 思路 : 代码 TODU 案例3 加载的炫酷动画. 以及策略模式的使用 效果图 思路 动画分析 先实现小圆的旋转动画, 开始在ondraw里面写动画 ...

  5. Spring 中策略模式的 2 个经典应用

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转自头条号程序汪汪 背景 程序员在项目实战中,策略模式用的非常多. 学习目标 会在Spring项目中运 ...

  6. Spring 中策略模式的 2 个经典应用,可以用来怼面试官了

    一.背景 程序员在项目实战中,策略模式用的非常多. 二.学习目标 会在Spring项目中运用策略模式 三.代码例子 废话不多说,Java的软件开发们注意啦,开车啦! 下面是一个查询业务使用策略模式的案 ...

  7. springboot map数据类型注入_SpringBoot结合策略模式实战套路

    1. SpringBoot结合策略模式实战套路 1.1. 前言 我们都知道设计模式好,可以让我们的代码更具可读性,扩展性,易于维护,但大部分程序猿一开始都学过至少一遍设计模式吧,实战中不知用到了几成. ...

  8. 策略模式玩转步兵,骑士和弓箭手

    继承很不错 小帅刚毕业就进了一家游戏公司工作,公司正在开发一款新的即时战略游戏,领导让他设计游戏里的兵种及行为. 在第一个版本里,只有步兵,骑士和弓箭手三个兵种,每个兵种都有移动,停止,攻击和自愈四种 ...

  9. 【Java设计模式】Java设计模式之(十五)策略模式(Strategy Pattern)

    本文目录 一.策略模式介绍 1.1 含义 1.2 适用场景 1.3 主要解决 1.4 应用实例 1.5 优缺点 二.策略模式实现 2.1 类图 2.2 代码实现 第一个案例:策略模式代码实现 第二个案 ...

最新文章

  1. 设计模式(四)简单工厂模式
  2. 健身环爆打老头环!超高难度击败boss,宫崎英高估计也想不到,代码+硬件教程已开源...
  3. python从零开始的学习-python学习过程之从零开始
  4. 在WebPart中上传图片到SharePoint图片库,读取Exif信息到图片的自定义属性
  5. html css 学习笔记(1)背景相关
  6. 喜讯,Asp.net Ajax 文档提供下载
  7. python3 批量定义多个变量_Python 3.8 新功能大揭秘
  8. 如果王思聪是产品经理
  9. python 秘钥_python – 使用ssh密钥加密和解密密码
  10. bazel proxy 设置
  11. SLM4054独立线性锂电池充电器的芯片的学习
  12. ad中按钮开关的符号_电路仿真软件CADe_SIMU的电气元件符号翻译和下载地址
  13. 如何通俗易懂理解云原生
  14. java企业项目进度绩效考核管理系统 SSH
  15. 公网地址和私网地址问题
  16. 微信小程序中的用户ID(包括openid和unionid)
  17. php thinkadmin自定义一个弹出弹窗批量操作功能
  18. 百度地图-创建标注 画线
  19. 在三人易行学习PLC编程有什么好处?
  20. mysql 在指定的dsn中_access 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...

热门文章

  1. 2018-3-10论文(网络评论中非结构化信息表示与应用研究)-----综合评价的实例
  2. quartz关闭DBUG日志
  3. mysql无法远程连接
  4. React和Jquery比较
  5. PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树
  6. component-scan和annotation-driven
  7. 程序员眼中的英文单词是这样的
  8. AE,按照属性值关系选择要素
  9. js去除数组中重复值
  10. php字符串处理函数相关操作