- 使用多态或政策模式:将條件判斷轉換為對象的行為,減少 if-else 的使用。
public interface DiscountStrategy {
double applyDiscount(double amount);
}
public class SeniorDiscountStrategy implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
// 計算老年人優惠後的價格
return amount * 0.9;
}
}
public class StudentDiscountStrategy implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
// 計算學生優惠後的價格
return amount * 0.8;
}
}
public class DiscountCalculator {
private DiscountStrategy discountStrategy;
public void setDiscountStrategy(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double calculateDiscount(double amount) {
return discountStrategy.applyDiscount(amount);
}
}
// 使用示例
DiscountCalculator calculator = new DiscountCalculator();
calculator.setDiscountStrategy(new SeniorDiscountStrategy());
double discountedPrice = calculator.calculateDiscount(100.0);
- 使用工廠模式:通過工廠類建立對象,避免直接使用 if-else 進行對象的建立。
public interface DiscountStrategy {
double applyDiscount(double amount);
}
public class SeniorDiscountStrategy implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
// 計算老年人優惠後的價格
return amount * 0.9;
}
}
public class StudentDiscountStrategy implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
// 計算學生優惠後的價格
return amount * 0.8;
}
}
public class DiscountStrategyFactory {
public static DiscountStrategy createDiscountStrategy(String userType) {
if (userType.equalsIgnoreCase("senior")) {
return new SeniorDiscountStrategy();
} else if (userType.equalsIgnoreCase("student")) {
return new StudentDiscountStrategy();
}
return null;
}
}
// 使用示例
DiscountStrategy discountStrategy = DiscountStrategyFactory.createDiscountStrategy("senior");
double discountedPrice = discountStrategy.applyDiscount(100.0);
- 使用 Map 或政策映射:将條件與對應的操作存儲在 Map 中,根據條件查找對應的操作進行執行。
public class DiscountCalculator {
private Map<String, DiscountStrategy> discountStrategies;
public DiscountCalculator() {
discountStrategies = new HashMap<>();
discountStrategies.put("senior", new SeniorDiscountStrategy());
discountStrategies.put("student", new StudentDiscountStrategy());
}
public double calculateDiscount(String userType, double amount) {
DiscountStrategy discountStrategy = discountStrategies.get(userType);
if (discountStrategy != null) {
return discountStrategy.applyDiscount(amount);
}
return amount;
}
}
// 使用示例
DiscountCalculator calculator = new DiscountCalculator();
double discountedPrice = calculator.calculateDiscount("senior", 100.0);
4、使用枚舉優化
public enum DiscountType {
SENIOR {
@Override
public double applyDiscount(double amount) {
// 計算老年人優惠後的價格
return amount * 0.9;
}
},
STUDENT {
@Override
public double applyDiscount(double amount) {
// 計算學生優惠後的價格
return amount * 0.8;
}
};
public abstract double applyDiscount(double amount);
}
// 使用示例
DiscountType discountType = DiscountType.SENIOR;
double discountedPrice = discountType.applyDiscount(100.0);
通過枚舉類型,可以将不同條件的操作邏輯封裝在枚舉常量中,使用起來更加簡潔和易于擴充。