Appearance
策略模式在实际项目中的灵活应用
下面我将通过一个具体的电商促销策略案例,详细阐述策略模式的实际应用:
java
// 定义促销策略接口
public interface PromotionStrategy {
double calculatePrice(double originalPrice);
}
// 具体促销策略实现:打折策略
public class DiscountStrategy implements PromotionStrategy {
private double discountRate;
public DiscountStrategy(double discountRate) {
this.discountRate = discountRate;
}
@Override
public double calculatePrice(double originalPrice) {
return originalPrice * discountRate;
}
}
// 具体促销策略:满减策略
public class FullReductionStrategy implements PromotionStrategy {
private double threshold;
private double reduction;
public FullReductionStrategy(double threshold, double reduction) {
this.threshold = threshold;
this.reduction = reduction;
}
@Override
public double calculatePrice(double originalPrice) {
return originalPrice >= threshold ? originalPrice - reduction : originalPrice;
}
}
// 促销上下文管理器
public class PromotionContext {
private PromotionStrategy promotionStrategy;
public void setPromotionStrategy(PromotionStrategy strategy) {
this.promotionStrategy = strategy;
}
public double calculateFinalPrice(double originalPrice) {
return promotionStrategy.calculatePrice(originalPrice);
}
}
// 使用示例
public class PromotionDemo {
public static void main(String[] args) {
PromotionContext context = new PromotionContext();
// 双十一:8折促销
context.setPromotionStrategy(new DiscountStrategy(0.8));
System.out.println("双十一价格:" + context.calculateFinalPrice(1000));
// 圣诞节:满1000减200
context.setPromotionStrategy(new FullReductionStrategy(1000, 200));
System.out.println("圣诞节价格:" + context.calculateFinalPrice(1000));
}
}策略模式优势:
- 开闭原则:新增策略无需修改现有代码
- 算法独立性:各策略相互解耦
- 运行时动态切换策略
- 消除大量条件语句
- 提高代码可维护性
实践建议:
- 策略数量不宜过多,避免类爆炸
- 策略之间应该是平等的
- 优先使用组合,而非继承
- 结合工厂模式管理策略创建
通过这种设计,电商平台可以轻松应对不同节日、不同场景的促销策略,实现灵活的价格计算逻辑。
更新: 2025-01-25 14:36:03
原文: https://www.yuque.com/tulingzhouyu/db22bv/pxf2btgv0sg5uyy0