策略模式(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:使用策略模式来实现不同的排序和搜索算法。

总结

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

历史热点文章

相关推荐
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
加班是不可能的,除非双倍日工资2 小时前
css预编译器实现星空背景图
前端·css·vue3
桦说编程2 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip3 小时前
vite和webpack打包结构控制
前端·javascript
excel4 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼4 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin