根据不同用户类型,计算不同的优惠价格,先写一个计算价格的接口:
public interface DiscountStrategy {
double calculateDiscount(double totalPrice);
}
这个接口对应了三个实现类
@Service
public class AdvancedDiscountStrategy implements DiscountStrategy {
/**
* 高级客户的折扣
* @param totalPrice
* @return
*/
@Override
public double calculateDiscount(double totalPrice) {
if (totalPrice >= 1000) {
return totalPrice * 0.3;
} else {
return totalPrice * 0.2;
}
}
}
@Service
public class VIPDiscountStrategy implements DiscountStrategy {
/**
* 计算VIP客户的折扣
* @param totalPrice
* @return
*/
@Override
public double calculateDiscount(double totalPrice) {
// 计算VIP客户的折扣
return totalPrice * 0.2;
}
}
@Service
public class NormalDiscountStrategy implements DiscountStrategy {
/**
* 普通客户没有折扣
* @param totalPrice
* @return
*/
@Override
public double calculateDiscount(double totalPrice) {
return 0.0;
}
}
最后根据用户的类型去实现不同的接口
@Service
public class DiscountService {
@Autowired
private NormalDiscountStrategy normalDiscountStrategy;
@Autowired
private VIPDiscountStrategy vipDiscountStrategy;
@Autowired
private AdvancedDiscountStrategy advancedDiscountStrategy;
public double calculateDiscount(String customerType, double totalPrice) {
DiscountStrategy discountStrategy;
switch (customerType) {
case "normal":
discountStrategy = normalDiscountStrategy;
break;
case "vip":
discountStrategy = vipDiscountStrategy;
break;
case "advanced":
discountStrategy = advancedDiscountStrategy;
break;
default:
throw new IllegalArgumentException("Unknown customer type: " + customerType);
}
return discountStrategy.calculateDiscount(totalPrice);
}
}
controller调用
@RestController
public class DiscountController {
@Autowired
private DiscountService discountService;
@GetMapping("/discount")
public double getDiscount(@RequestParam("customerType") String customerType, @RequestParam("totalPrice") double totalPrice) {
return discountService.calculateDiscount(customerType, totalPrice);
}
}