Java策略模式实战:如何让代码更灵活、可扩展

一、策略模式简介
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户,从而让客户可以灵活地选择算法。
二、策略模式实战案例
为了让大家更好地理解策略模式,下面我们以一个简单的购物车系统为例,演示如何使用策略模式实现不同优惠活动的灵活切换。
1. 定义优惠策略接口
首先,我们需要定义一个优惠策略接口,该接口包含一个计算优惠金额的方法。
```java
public interface DiscountStrategy {
double calculateDiscount(double totalAmount);
}
```
2. 实现具体优惠策略
接下来,我们实现具体的优惠策略,例如满减、折扣等。
```java
public class FullReductionStrategy implements DiscountStrategy {
private double fullAmount;
private double reductionAmount;
public FullReductionStrategy(double fullAmount, double reductionAmount) {
this.fullAmount = fullAmount;
this.reductionAmount = reductionAmount;
}
@Override
public double calculateDiscount(double totalAmount) {
if (totalAmount >= fullAmount) {
return reductionAmount;
}
return 0;
}
}
public class DiscountStrategyFactory {
public static DiscountStrategy getDiscountStrategy(String type) {
switch (type) {
case "full_reduction":
return new FullReductionStrategy(100, 10);
case "discount":
return new DiscountStrategy(0.9);
default:
return null;
}
}
}
```
3. 客户端使用策略
在客户端,我们可以根据实际情况选择合适的优惠策略。
```java
public class ShoppingCart {
private DiscountStrategy discountStrategy;
public ShoppingCart(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double calculateTotalAmount(double totalAmount) {
return totalAmount - discountStrategy.calculateDiscount(totalAmount);
}
}
```
4. 测试
```java
public class Main {
public static void main(String[] args) {
DiscountStrategy discountStrategy = DiscountStrategyFactory.getDiscountStrategy("full_reduction");
ShoppingCart shoppingCart = new ShoppingCart(discountStrategy);
double totalAmount = 150;
double discountedAmount = shoppingCart.calculateTotalAmount(totalAmount);
System.out.println("Original Amount: " + totalAmount);
System.out.println("Discounted Amount: " + discountedAmount);
}
}
```
输出结果:
```
Original Amount: 150.0
Discounted Amount: 140.0
```
通过以上案例,我们可以看到策略模式在购物车系统中起到了很好的作用。当需要添加新的优惠活动时,我们只需要实现一个新的优惠策略类,并在`DiscountStrategyFactory`中添加相应的逻辑即可。
三、策略模式的优点
1. 提高代码的复用性:将算法封装在策略类中,可以在不同的场景下复用。
2. 提高代码的可扩展性:添加新的策略类,无需修改现有代码,只需在`DiscountStrategyFactory`中添加相应的逻辑。
3. 降低代码的耦合度:策略类与客户端代码解耦,使得客户端代码更加简洁。
4. 提高代码的可读性:通过策略名称,可以清晰地了解每种优惠活动的具体规则。
四、总结
本文通过一个购物车系统案例,介绍了策略模式的实战应用。策略模式可以帮助我们实现算法的灵活切换,提高代码的复用性、可扩展性和可读性。在实际开发过程中,我们可以根据需求选择合适的策略模式,让代码更加优雅。






