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

本文共 2265 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
    查看>>
    plsql查询乱码问题解决
    查看>>
    PLSQL的DBMS_GETLINE
    查看>>
    quartz简单demo,教你最快使用quartz
    查看>>
    PlutoSDR学习笔记(一)—函数API手册
    查看>>
    Quartz安装包中的15个example
    查看>>
    Quartz学习总结(2)——定时任务框架Quartz详解
    查看>>
    pm2 start命令中的json格式详解
    查看>>
    pm2启动报错
    查看>>
    pm2通过配置文件部署nodejs代码到服务器
    查看>>
    Unknown character set: 'utf8mb4'
    查看>>
    PML调用PDMS内核命令研究
    查看>>
    PMM安装-第一篇
    查看>>
    PMP知识要点(第九章)
    查看>>
    PNETLab 镜像包官方下载太慢?不急,最新版本PNET_4.2.10分享!
    查看>>
    POCO库中文编程参考指南(4)Poco::Net::IPAddress
    查看>>
    Quartz基本使用(二)
    查看>>
    POC项目安装与使用指南
    查看>>
    Podman核心技术详解
    查看>>
    pods 终端安装 第三方框架的一些命令
    查看>>