MST

星途 面试题库

面试题:Java策略模式在电商系统价格计算中的应用

假设你正在开发一个电商系统,不同类型的商品有不同的价格计算策略,如普通商品按原价,促销商品有折扣价,会员商品有会员专属价。请使用Java策略模式实现这一价格计算功能,简述实现思路并给出关键代码示例。
28.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义一个价格计算策略的接口,包含计算价格的方法。
  2. 为每种商品类型创建实现该接口的具体策略类,在各自的类中实现对应的价格计算逻辑。
  3. 在商品类中,持有一个策略接口的引用,通过构造函数或设置方法传入具体的策略对象,调用策略对象的方法来计算价格。

关键代码示例

  1. 定义价格计算策略接口
public interface PriceCalculationStrategy {
    double calculatePrice(double originalPrice);
}
  1. 普通商品价格计算策略类
public class NormalProductStrategy implements PriceCalculationStrategy {
    @Override
    public double calculatePrice(double originalPrice) {
        return originalPrice;
    }
}
  1. 促销商品价格计算策略类
public class PromotionProductStrategy implements PriceCalculationStrategy {
    private double discount;

    public PromotionProductStrategy(double discount) {
        this.discount = discount;
    }

    @Override
    public double calculatePrice(double originalPrice) {
        return originalPrice * discount;
    }
}
  1. 会员商品价格计算策略类
public class MemberProductStrategy implements PriceCalculationStrategy {
    private double memberDiscount;

    public MemberProductStrategy(double memberDiscount) {
        this.memberDiscount = memberDiscount;
    }

    @Override
    public double calculatePrice(double originalPrice) {
        return originalPrice * memberDiscount;
    }
}
  1. 商品类
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);
    }
}
  1. 测试代码
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());
    }
}