策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析

肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

在电商平台中,优惠券系统是促销和吸引顾客的重要工具。不同的优惠券有不同的使用策略,例如满减、打折、买赠等。为了灵活地应对市场变化,需要动态地更换优惠券策略。

2. 为什么要使用策略设计模式

策略模式允许在运行时选择算法或行为,将算法的使用和实现分离,提高系统的灵活性和可扩展性。

3. 标准策略设计模式图

4. 业务策略设计模式图

5. 业务代码参考

java 复制代码
    // 优惠券策略接口
    interface CouponStrategy {
        double apply(double originalPrice);
    }

    // 满减策略
    class FullReductionStrategy implements CouponStrategy {
        public double apply(double originalPrice) {
            // 假设满100减10
            int discount = (int) (originalPrice / 100) * 10;
            return originalPrice - discount;
        }
    }

    // 打折策略
    class DiscountStrategy implements CouponStrategy {
        private double discount;

        public DiscountStrategy(double discount) {
            this.discount = discount;
        }

        public double apply(double originalPrice) {
            return originalPrice * (1 - discount);
        }
    }

    // 买赠策略
    class BuyGiftStrategy implements CouponStrategy {
        public double apply(double originalPrice) {
            // 假设买200赠50
            if (originalPrice >= 200) {
                return 50;
            }
            return 0;
        }
    }

    // 优惠券上下文
    class CouponContext {
        private CouponStrategy couponStrategy;

        public void setCouponStrategy(CouponStrategy couponStrategy) {
            this.couponStrategy = couponStrategy;
        }

        public double applyCoupon(double originalPrice) {
            if (couponStrategy != null) {
                return couponStrategy.apply(originalPrice);
            }
            return originalPrice;
        }
    }

    // 客户端使用
    class ECommercePlatform {
        public static void main(String[] args) {
            CouponContext couponContext = new CouponContext();

            // 设置满减策略
            couponContext.setCouponStrategy(new FullReductionStrategy());
            System.out.println("After applying full reduction: " + couponContext.applyCoupon(210));

            // 更换为打折策略
            couponContext.setCouponStrategy(new DiscountStrategy(0.1));
            System.out.println("After applying discount: " + couponContext.applyCoupon(210));

            // 更换为买赠策略
            couponContext.setCouponStrategy(new BuyGiftStrategy());
            System.out.println("After applying buy gift: " + couponContext.applyCoupon(210));
        }
    }

6. 使用策略设计模式的好处

  • 灵活性:动态更换优惠券策略,快速响应市场变化。
  • 可扩展性:新增优惠券策略时无需修改现有代码。

7. 其他使用策略设计模式场景参考

  • 支付策略:不同支付方式的手续费计算。
  • 排序算法:根据不同需求选择不同的排序算法。

8. 可参考开源框架

  • Java Streams API:使用策略模式来实现不同的排序和搜索算法。

总结

策略模式提供了一种灵活的算法替换机制,通过定义一系列可互换的策略,可以动态地改变对象的行为。

历史热点文章

相关推荐
爱喝白开水a30 分钟前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
董世昌4131 分钟前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
80530单词突击赢39 分钟前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法1 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy1 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇1 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
吃杠碰小鸡2 小时前
高中数学-数列-导数证明
前端·数学·算法
long3162 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
kingwebo'sZone2 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09012 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js