博客
关于我
设计模式 - 策略模式
阅读量:215 次
发布时间:2019-02-28

本文共 2314 字,大约阅读时间需要 7 分钟。

策略模式在订单支付场景中的应用

在订单支付场景中,选择多种支付方式(如支付宝、微信、银联等)会导致代码臃肿,难以维护。为了解决这个问题,可以采用策略模式来优化代码结构,使其更易维护且扩展性强。

问题分析

原始代码中,订单类使用if-else语句处理支付方式选择,代码结构复杂且难以扩展,违背了开闭原则。

策略模式的应用

步骤一:创建抽象支付接口

定义一个支付接口,所有支付方式类都实现该接口。

public interface Payment {
boolean pay(String orderId, long amount);
}

步骤二:创建具体支付策略实现类

分别创建支付宝、微信、银联等支付方式的具体策略类。

public class AliPay implements Payment {
@Override
public boolean pay(String orderId, long amount) {
System.out.println("支付宝支付,订单号:" + orderId + " 金额:" + amount);
return true;
}
}
public class WeChatPay implements Payment {
@Override
public boolean pay(String orderId, long amount) {
System.out.println("微信支付,订单号:" + orderId + " 金额:" + amount);
return true;
}
}

步骤三:修改订单类

订单类持有支付策略接口的引用,并调用其方法。

public class Order {
private String orderId;
private long amount;
private Payment payType;
public Order(String orderId, Payment payType, long amount) {
this.orderId = orderId;
this.payType = payType;
this.amount = amount;
}
public boolean pay() {
boolean result = payType.pay(orderId, amount);
if (!result) {
System.out.println("支付失败");
}
return result;
}
}

步骤四:创建支付策略工厂

工厂类用于根据支付方式名称获取相应的支付策略。

public class PayStrategyFactory {
private static Map
paymentStrategyMap = new HashMap<>();
static {
paymentStrategyMap.put("aliPay", new AliPay());
paymentStrategyMap.put("wechatPay", new WeChatPay());
paymentStrategyMap.put("unionPay", new UnionPay());
}
public static Payment getPayment(String type) {
return paymentStrategyMap.get(type);
}
}

步骤五:测试客户端代码

客户端模拟前端传入支付方式,工厂获取策略,注入到订单类中。

public class OrderTest {
@Test
public void test() {
String orderId = "123";
String payType = "aliPay";
long amount = 200;
Order order = new Order(orderId, payType, amount);
order.pay();
}
}

优化效果

  • 代码简洁:订单类的pay方法简化,去除了if-else语句,代码更易读。
  • 扩展性强:新增支付方式只需创建对应的策略类并注册工厂即可,无需修改主类。
  • 可维护性高:每个策略类独立,问题易于定位和修复。
  • 应用场景

    策略模式在以下场景中尤为适用:

    • 需要在多个算法中选择一种执行时的场景。
    • 具体算法的行为可以在运行时更改,而不影响其他部分。

    优缺点

    优点

    • 开闭原则:符合开闭原则,便于扩展。
    • 减少条件判断:避免了大量if-else语句。
    • 安全性:策略的替换可以增强系统安全性。

    缺点

    • 客户端依赖:客户端需了解所有策略。
    • 维护复杂度:策略类数量多,维护难度增加。

    总结

    通过引入策略模式,订单支付场景的代码结构得到了优化,支付方式的选择变得更加灵活和可维护。这一模式在需要频繁更换或扩展支付方式时尤为重要,符合现代软件开发的最佳实践。

    转载地址:http://lrbp.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现recursive quick sort递归快速排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现regular-expression-matching正则表达式匹配算法(附完整源码)
    查看>>
    Objective-C实现relu线性整流函数算法(附完整源码)
    查看>>
    Objective-C实现restful api服务(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>
    Objective-C实现ReverseNumber反转数字算法 (附完整源码)
    查看>>
    Objective-C实现ReversePolishNotation逆波兰表示法算法 (附完整源码)
    查看>>
    Objective-C实现RGB和HSV相互转换算法(附完整源码)
    查看>>
    Objective-C实现RGB转十六进制算法(附完整源码)
    查看>>
    Objective-C实现ripple adder涟波加法器算法(附完整源码)
    查看>>
    Objective-C实现RKM匹配(附完整源码)
    查看>>
    Objective-C实现RodCutting棒材切割最大利润算法(附完整源码)
    查看>>
    Objective-C实现roman numerals罗马数字算法(附完整源码)
    查看>>
    Objective-C实现Romberg算法(附完整源码)
    查看>>
    Objective-C实现ROT13密码算法(附完整源码)
    查看>>
    Objective-C实现rotate matrix旋转矩阵算法(附完整源码)
    查看>>
    Objective-C实现round robin循环赛算法(附完整源码)
    查看>>
    Objective-C实现RRT路径搜索(附完整源码)
    查看>>