博客
关于我
设计模式 - 策略模式
阅读量: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/

    你可能感兴趣的文章
    oracle script
    查看>>
    Oracle select表要带双引号的原因
    查看>>
    Oracle SOA Suit Adapter
    查看>>
    Oracle Spatial GeoRaster 金字塔栅格存储
    查看>>
    Oracle Spatial空间数据库建立
    查看>>
    UML— 活动图
    查看>>
    Oracle Statspack分析报告详解(一)
    查看>>
    oracle tirger_在Oracle中,临时表和全局临时表有什么区别?
    查看>>
    oracle where 条件的执行顺序分析1
    查看>>
    oracle 使用leading, use_nl, rownum调优
    查看>>
    oracle 修改字段类型方法
    查看>>
    Oracle 写存储过程的一个模板还有一些基本的知识点
    查看>>
    Oracle 创建 DBLink 的方法
    查看>>
    oracle 创建双向备份,Materialized View 物化视图实现 Oracle 表双向同步
    查看>>
    oracle 创建字段自增长——两种实现方式汇总
    查看>>
    Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
    查看>>
    oracle 可传输的表空间:rman
    查看>>
    Oracle 启动监听命令
    查看>>
    Oracle 在Drop表时的Cascade Constraints
    查看>>
    Oracle 在Sqlplus 执行sql脚本文件。
    查看>>