建造者模式在促销系统中的实际运用

 朋友们,书接上文。接下来我们考虑用建造者模式去解决上篇文章结尾的问题。

 首先,我们折扣接口和上篇已经实现策略代码都是不用改的。这不正是我们使用的设计模式的意义所在吗?保持了系统的可扩展性。直接上代码。

新增复合策略类(Composite Strategy):CompositePromotionStrategy.java

import java.util.List;

public class CompositePromotionStrategy implements PromotionStrategy {
    private List<PromotionStrategy> promotionStrategies;

    public CompositePromotionStrategy(List<PromotionStrategy> promotionStrategies) {
        this.promotionStrategies = promotionStrategies;
    }

    @Override
    public double applyPromotion(double price) {
        for (PromotionStrategy strategy : promotionStrategies) {
            price = strategy.applyPromotion(price);
        }
        return price;
    }
}

 新增建造者类(Builder):PromotionBuilder.java

import java.util.ArrayList;
import java.util.List;

public class PromotionBuilder {
    private List<PromotionStrategy> promotions = new ArrayList<>();

    public void addPromotion(PromotionStrategy promotionStrategy) {
        promotions.add(promotionStrategy);
    }

    public PromotionStrategy build() {
        return new CompositePromotionStrategy(promotions);
    }
}

扩展工厂类接受的参数(这一步是不影响建造者模式,没有也行,只是想增强一下这个工厂类)

public class PromotionFactory {
    public static PromotionStrategy createPromotionStrategy(String promotionType, double discount, double threshold, double reduction) {
        switch (promotionType) {
            case "discount":
                return new DiscountPromotion(discount);
            case "full_reduction":
                return new FullReductionPromotion(threshold, reduction);
            default:
                throw new IllegalArgumentException("Unknown promotion type: " + promotionType);
        }
    }
}

测试方法

public class BuilderPatternDemo {
    public static void main(String[] args) {
        PromotionBuilder builder = new PromotionBuilder();

        // 添加促销策略
        builder.addPromotion(PromotionFactory.createPromotionStrategy("discount", 0.2, 0, 0));
        builder.addPromotion(PromotionFactory.createPromotionStrategy("full_reduction", 0, 100, 30));

        // 构建促销活动
        PromotionStrategy promotionStrategy = builder.build();

        double totalPrice = 150;
        double finalPrice = promotionStrategy.applyPromotion(totalPrice);

        System.out.println("Total Price: $" + totalPrice);
        System.out.println("Final Price after Promotion: $" + finalPrice);
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值