首先,定义策略接口和不同的策略实现类:
- // 策略接口
- public interface DiscountStrategy {
- double applyDiscount(double originalPrice);
- }
-
- // 学生折扣策略
- @Component
- public class StudentDiscountStrategy implements DiscountStrategy {
- @Override
- public double applyDiscount(double originalPrice) {
- // 学生折扣为 10%
- return originalPrice * 0.9;
- }
- }
-
- // 老年人折扣策略
- @Component
- public class SeniorCitizenDiscountStrategy implements DiscountStrategy {
- @Override
- public double applyDiscount(double originalPrice) {
- // 老年人折扣为 15%
- return originalPrice * 0.85;
- }
- }
-
- // 普通顾客无折扣策略
- @Component
- public class NoDiscountStrategy implements DiscountStrategy {
- @Override
- public double applyDiscount(double originalPrice) {
- // 普通顾客无折扣
- return originalPrice;
- }
- }
在上述代码中,使用了 @Component
注解来将每个折扣策略实现类声明为 Spring 管理的 Bean。
接下来,创建一个服务类,用于根据条件选择合适的折扣策略,并注入对应的策略 Bean:
- @Service
- public class DiscountService {
-
- @Autowired
- private StudentDiscountStrategy studentDiscountStrategy;
-
- @Autowired
- private SeniorCitizenDiscountStrategy seniorCitizenDiscountStrategy;
-
- @Autowired
- private NoDiscountStrategy noDiscountStrategy;
-
- public double calculateDiscountedPrice(double originalPrice, String customerType) {
- DiscountStrategy strategy = getDiscountStrategy(customerType);
- return strategy.applyDiscount(originalPrice);
- }
-
- private DiscountStrategy getDiscountStrategy(String customerType) {
- switch (customerType) {
- case "student":
- return studentDiscountStrategy;
- case "senior":
- return seniorCitizenDiscountStrategy;
- default:
- return noDiscountStrategy;
- }
- }
- }
在 DiscountService
中,我们通过 @Autowired
注解将各种折扣策略注入到服务类中,并根据客户类型选择合适的策略。
最后,可以在控制器(Controller)或其他服务中使用 DiscountService
:
- @RestController
- @RequestMapping("/discount")
- public class DiscountController {
-
- @Autowired
- private DiscountService discountService;
-
- @GetMapping("/calculate")
- public String calculateDiscount(@RequestParam String customerType, @RequestParam double originalPrice) {
- double discountedPrice = discountService.calculateDiscountedPrice(originalPrice, customerType);
- return "Discounted price for " + customerType + ": " + discountedPrice;
- }
- }
在这个示例中,DiscountController
中的 calculateDiscount
方法接收客户类型和原始价格作为参数,并调用 DiscountService
的 calculateDiscountedPrice
方法来计算折扣后的价格。
通过这种方式,你可以利用 Spring Boot 的依赖注入和管理功能,避免了使用大量的 if-else if 结构,使得代码更加清晰、灵活和可维护。
点点赞点点关注呀,持续分享有用的知识........................