• java使用策略模式优化代码中的if-else if 判断。


            首先,定义策略接口和不同的策略实现类:

    1. // 策略接口
    2. public interface DiscountStrategy {
    3. double applyDiscount(double originalPrice);
    4. }
    5. // 学生折扣策略
    6. @Component
    7. public class StudentDiscountStrategy implements DiscountStrategy {
    8. @Override
    9. public double applyDiscount(double originalPrice) {
    10. // 学生折扣为 10%
    11. return originalPrice * 0.9;
    12. }
    13. }
    14. // 老年人折扣策略
    15. @Component
    16. public class SeniorCitizenDiscountStrategy implements DiscountStrategy {
    17. @Override
    18. public double applyDiscount(double originalPrice) {
    19. // 老年人折扣为 15%
    20. return originalPrice * 0.85;
    21. }
    22. }
    23. // 普通顾客无折扣策略
    24. @Component
    25. public class NoDiscountStrategy implements DiscountStrategy {
    26. @Override
    27. public double applyDiscount(double originalPrice) {
    28. // 普通顾客无折扣
    29. return originalPrice;
    30. }
    31. }

    在上述代码中,使用了 @Component 注解来将每个折扣策略实现类声明为 Spring 管理的 Bean。

    接下来,创建一个服务类,用于根据条件选择合适的折扣策略,并注入对应的策略 Bean:

    1. @Service
    2. public class DiscountService {
    3. @Autowired
    4. private StudentDiscountStrategy studentDiscountStrategy;
    5. @Autowired
    6. private SeniorCitizenDiscountStrategy seniorCitizenDiscountStrategy;
    7. @Autowired
    8. private NoDiscountStrategy noDiscountStrategy;
    9. public double calculateDiscountedPrice(double originalPrice, String customerType) {
    10. DiscountStrategy strategy = getDiscountStrategy(customerType);
    11. return strategy.applyDiscount(originalPrice);
    12. }
    13. private DiscountStrategy getDiscountStrategy(String customerType) {
    14. switch (customerType) {
    15. case "student":
    16. return studentDiscountStrategy;
    17. case "senior":
    18. return seniorCitizenDiscountStrategy;
    19. default:
    20. return noDiscountStrategy;
    21. }
    22. }
    23. }

    DiscountService 中,我们通过 @Autowired 注解将各种折扣策略注入到服务类中,并根据客户类型选择合适的策略。

    最后,可以在控制器(Controller)或其他服务中使用 DiscountService

    1. @RestController
    2. @RequestMapping("/discount")
    3. public class DiscountController {
    4. @Autowired
    5. private DiscountService discountService;
    6. @GetMapping("/calculate")
    7. public String calculateDiscount(@RequestParam String customerType, @RequestParam double originalPrice) {
    8. double discountedPrice = discountService.calculateDiscountedPrice(originalPrice, customerType);
    9. return "Discounted price for " + customerType + ": " + discountedPrice;
    10. }
    11. }

    在这个示例中,DiscountController 中的 calculateDiscount 方法接收客户类型和原始价格作为参数,并调用 DiscountServicecalculateDiscountedPrice 方法来计算折扣后的价格。

    通过这种方式,你可以利用 Spring Boot 的依赖注入和管理功能,避免了使用大量的 if-else if 结构,使得代码更加清晰、灵活和可维护。

    点点赞点点关注呀,持续分享有用的知识........................ 

     

     

     

  • 相关阅读:
    怎么将ruoyi源代码与新业务代码分开写
    Zemax操作40--序列模式中LD光源模拟
    元宇宙产业委甘华鸣:关于术语“元宇宙”以及相关问题
    元素居中大合集
    K8S -理解StatefulSet - 部署有状态应用
    标签正则:标签平滑、标签蒸馏和自纠正
    3.6 OrCAD中元器件应该怎么进行镜像与翻转?
    【金融项目】尚融宝项目(十)
    攻防世界 —— hacknote
    2.1 Elasticsearch DSL搜索-数据准备
  • 原文地址:https://blog.csdn.net/w_l666/article/details/140433868