JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

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

wys521 2025-02-06 16:42:59 精选教程 13 ℃ 0 评论

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

欢迎 点赞,点赞,点赞。

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

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

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

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

3. 标准策略设计模式图

4. 业务策略设计模式图

5. 业务代码参考

????//?优惠券策略接口
????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:使用策略模式来实现不同的排序和搜索算法。

总结

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

历史热点文章



本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表