c语言支付方式,使用策略模式实现支付方式选择场景
为了加深对策略模式的理解,本节在来学习一个实例。相信小伙伴们都用过支付宝、微信支付、银联支付及京东白条,常见的应用场景就是大家在下单支付时会提示选择支付方式,如果没有选择支付方式,系统会用默认推荐的支付方式进行结算。
下面我们使用策略模式来模拟此业务场景,类图如下。
首先创建 Payment 抽象类,定义支付规范和支付逻辑,代码如下。
public abstract class Payment {
public abstract String getName();
//通用逻辑放到抽象类里面实现
public MsgResult pay(String uid, double amount) {
//余额是否足够
if (queryBalance(uid) < amount) {
return new MsgResult(500, "支付失败", "余额不足");
}
return new MsgResult(200, "支付成功", "支付金额" + amount);
}
protected abstract double queryBalance(String uid);
}
然后分别创建具体的支付方式,支付宝 AliPay 类的代码如下。
public class AliPay extends Payment {
public String getName() {
return "支付宝";
}
protected double queryBalance(String uid) {
return 900;
}
}
京东白条 JDPay 类的代码如下。
public class JDPay extends Payment {
public String getName() {
return "京东白条";
}
protected double queryBalance(String uid) {
return 500;
}
}
微信支付 WeChatPay 类的代码如下。
public class WeChatPay extends Payment {
@Override
public String getName() {
return "微信支付";
}
@Override
protected double queryBalance(String uid) {
return 263;
}
}
银联支付 UnionPay 类的代码如下。
public class UnionPay extends Payment {
@Override
public String getName() {
return "银联支付";
}
@Override
protected double queryBalance(String uid) {
return 120;
}
}
创建支付状态的包装类 MsgResult。
public class MsgResult {
private int code;
private Object data;
private String msg;
public MsgResult(int code, String msg, Object data) {
this.code = code;
this.data = data;
this.msg = msg;
}
@Override
public String toString() {
return "MsgResult{" +
"code=" + code +
", data=" + data +
", msg='" + msg + '\'' +
'}';
}
}
创建支付策略管理类。
import java.util.HashMap;
import java.util.Map;
public class PayStrategy {
public static final String ALI_PAY = "AliPay";
public static final String JD_PAY = "JdPay";
public static final String WECHAT_PAY = "WeChatPay";
public static final String UNION_PAY = "UnionPay";
public static final String DEFAULT_PAY = ALI_PAY;
private static Map strategy = new HashMap();
static {
strategy.put(ALI_PAY, new AliPay());
strategy.put(JD_PAY, new JDPay());
strategy.put(WECHAT_PAY, new WeChatPay());
strategy.put(UNION_PAY, new UnionPay());
}
public static Payment get(String payKey) {
if (!strategy.containsKey(payKey)) {
return strategy.get(DEFAULT_PAY);
}
return strategy.get(payKey);
}
}
创建订单 Order 类。
public class Order {
private String uid;
private String orderId;
private double amount;
public Order(String uid, String orderId, double amount) {
this.uid = uid;
this.orderId = orderId;
this.amount = amount;
}
public MsgResult pay() {
return pay(PayStrategy.DEFAULT_PAY);
}
public MsgResult pay(String payKey) {
Payment payment = PayStrategy.get(payKey);
System.out.println("欢迎使用" + payment.getName());
System.out.println("本次交易金额为" + amount + ",开始扣款");
return payment.pay(uid, amount);
}
}
最后编写客户端测试代码。
public class Test {
public static void main(String[] args) {
Order order = new Order("1", "2323235655956", 325);
System.out.println(order.pay(PayStrategy.ALI_PAY));
}
}
运行结果如下所示。
欢迎使用支付宝
本次交易金额为325.0,开始扣款
MsgResult{code=200, data=支付金额325.0, msg='支付成功'}
通过《策略模式实现选择促销优惠方案》和《策略模式实现选择支付方式场景》等常见的业务场景举例,希望小伙伴们能够更深刻地理解策略模式。
c语言支付方式,使用策略模式实现支付方式选择场景相关推荐
- 策略模式总结,适用场景,优缺点,代码示例
策略模式总结,适用场景,优缺点,代码示例 1.简介 1.1 继承带来的扩展和复用问题 1.2 进一步改进,利用接口 1.3 进一步改进,策略模式 2.适用场景 3.优点 4.缺点 5.代码示例 6.源 ...
- 设计模式Java语言实现之策略模式
策略模式: 前言: 作者:韩数 Github:github.com/hanshuaikan- 时间:2019-01-26 JDK版本:1.8 定义: 定义一系列的算法,把它们一个个封装起来,并且使它们 ...
- C语言实现设计模式-策略模式+命令模式组合使用
文章目录 使用环境介绍 使用策略模式-区分使用哪种方法 使用命令模式-区分哪种命令动作 使用环境介绍 当主设备和从设备使用串口信息交互通讯,根据串口协议,实现对从设备的控制访问. 使用情况1:当主设备 ...
- C语言和设计模式-策略模式
策略模式 1.赔了夫人又折兵 "孙权看到刘备有雄起之意,杀是不能杀了,那会惹天下人唾弃,就想个招挫他一下,那有什么办法呢?孙权有个妹妹--孙尚香,准备招刘备做女婿,然后孙权想办法把刘备软禁起 ...
- C语言实现设计模式—策略模式
文章目录 策略模式介绍 实现分析 代码模块 Step1:支持处理的数据类型,按优先级顺序划分,即区分策略类型 Step2: 查找策略对象,方法处理 Step3: 设备处理 策略模式介绍 意图:定义一系 ...
- 策略模式Strategy Pattern应用场景
策略模式(Strategy Pattern)是指定义了算法家族.分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户. 策略模式的应用场景 1.假如系统中有很多类,而他们的 ...
- C语言,去你的策略模式!
前言 这里先插一点题外话,在C语言中,实现封装.继承.隐藏.多态等等特性,是完全没有问题的.但是在使用过程中,必定是不如自带这些特性的语言方便好用的,比如C \java等. 一旦要通过C语言来实现各种 ...
- Java设计模式-策略模式(Strategy)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...
- 采用注解实现策略模式
目录 一.前言 二.采用简单的注解方式进行业务策略模式 (一)场景举例 (二)实现方案 1.基本代码准备 2.基本功能接口定义 3.定义注解与不同的策略实现 4.业务实际使用 5.测试及结果展示 三. ...
最新文章
- Winform开发中常见界面的DevExpress处理操作
- Android 系统镜像: boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img
- HDU 1254 推箱子 BFS
- reactjs redux异步action
- opencv4.10不能使用sift = cv2.xfeatures2d.SIFT_create()
- linux 下 oracle 10.2.0.1 32bit netca报错
- 12个很棒的Spring数据教程来启动您的数据项目
- k8s + 微服务,王炸!
- js中几个对象的区别和用法
- 实战Flash游戏开发
- 美团三面挂了....这个坑千万别踩!
- Android 手机模拟游戏手柄(USB,C#,winio)
- bms中soh计算方式_BMS算法设计之电池SOH介绍(上)
- Easypack: Ansible方式部署工具中升级Dashboard至2.0.0版
- 5、多线程:龟兔赛跑
- EnumSet源码分析
- SEO基础知识:什么是网站结构,为什么重要?
- CXF框架发布WebService服务的例子
- 软件测试-3(测试场景)
- 关于小蚂蚁数据(SmallAnt Data)