问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/alises1314/article/details/140213497

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

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

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

标准策略设计模式图

业务策略设计模式图

业务代码参考

// 优惠券策略接口
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));
    }
}

使用策略设计模式的好处

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

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

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

可参考开源框架

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

总结

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号