实现思路
- 定义一个价格计算策略的接口,包含计算价格的方法。
- 为每种商品类型创建实现该接口的具体策略类,在各自的类中实现对应的价格计算逻辑。
- 在商品类中,持有一个策略接口的引用,通过构造函数或设置方法传入具体的策略对象,调用策略对象的方法来计算价格。
关键代码示例
- 定义价格计算策略接口
public interface PriceCalculationStrategy {
double calculatePrice(double originalPrice);
}
- 普通商品价格计算策略类
public class NormalProductStrategy implements PriceCalculationStrategy {
@Override
public double calculatePrice(double originalPrice) {
return originalPrice;
}
}
- 促销商品价格计算策略类
public class PromotionProductStrategy implements PriceCalculationStrategy {
private double discount;
public PromotionProductStrategy(double discount) {
this.discount = discount;
}
@Override
public double calculatePrice(double originalPrice) {
return originalPrice * discount;
}
}
- 会员商品价格计算策略类
public class MemberProductStrategy implements PriceCalculationStrategy {
private double memberDiscount;
public MemberProductStrategy(double memberDiscount) {
this.memberDiscount = memberDiscount;
}
@Override
public double calculatePrice(double originalPrice) {
return originalPrice * memberDiscount;
}
}
- 商品类
public class Product {
private String name;
private double originalPrice;
private PriceCalculationStrategy strategy;
public Product(String name, double originalPrice, PriceCalculationStrategy strategy) {
this.name = name;
this.originalPrice = originalPrice;
this.strategy = strategy;
}
public double calculateFinalPrice() {
return strategy.calculatePrice(originalPrice);
}
}
- 测试代码
public class Main {
public static void main(String[] args) {
Product normalProduct = new Product("普通商品", 100, new NormalProductStrategy());
Product promotionProduct = new Product("促销商品", 100, new PromotionProductStrategy(0.8));
Product memberProduct = new Product("会员商品", 100, new MemberProductStrategy(0.9));
System.out.println("普通商品最终价格: " + normalProduct.calculateFinalPrice());
System.out.println("促销商品最终价格: " + promotionProduct.calculateFinalPrice());
System.out.println("会员商品最终价格: " + memberProduct.calculateFinalPrice());
}
}