c语言支付方式,使用策略模式实现支付方式选择场景

为了加深对策略模式的理解,本节在来学习一个实例。相信小伙伴们都用过支付宝、微信支付、银联支付及京东白条,常见的应用场景就是大家在下单支付时会提示选择支付方式,如果没有选择支付方式,系统会用默认推荐的支付方式进行结算。

下面我们使用策略模式来模拟此业务场景,类图如下。

184fa68a1b05cd2a5561b45145642640.png

首先创建 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='支付成功'}

通过《策略模式实现选择促销优惠方案》和《策略模式实现选择支付方式场景》等常见的业务场景举例,希望小伙伴们能够更深刻地理解策略模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值