zoukankan      html  css  js  c++  java
  • SpringBoot使用策略模式+工厂模式

    为了防止大量的if...else...switch case代码的出现,可以使用策略模式+工厂模式进行优化。
    在我的项目当中,报表繁多,所以尝试了这种方式进行优化报表的架构。代码很简单,如下:

    Factory工厂类

    @Service
    public class ReportFactory {
    
        /**
         * 初始化的时候将所有的ReportService自动加载到Map中
         */
        @Autowired
        private final Map<String, ReportService> reportIns = new ConcurrentHashMap<>();
    
        public ReportService getReportIns(String code) {
            ReportService reportInstance = reportIns.get(code);
            if (reportInstance == null) {
                throw new RuntimeException("未定义reportInstance");
            }
    
            return reportInstance;
        }
    
    }
    

    接口

    public interface ReportService {
        String getResult();
    }
    

    实现类

    @Component(value = "A1")
    public class ReportServiceA1 implements ReportService {
    
        @Override
        public String getResult() {
            return "我是A1";
        }
    }
    
    @Component(value = "A2")
    public class ReportServiceA2 implements ReportService {
    
        @Override
        public String getResult() {
            return "我是A2";
        }
    }
    

    测试

    @SpringBootTest
    public class BlogServerApplicationTest {
    
        @Autowired
        ReportFactory reportFactory;
    
        @Test
        public void test2() {
            String result1 = reportFactory.getReportIns("A1").getResult();
            System.out.println("-----------------");
            System.out.println(result1);
            String result2 = reportFactory.getReportIns("A2").getResult();
            System.out.println("-----------------");
            System.out.println(result2);
        }
    }
    

    打印如下:

    -----------------
    我是A1
    -----------------
    我是A2
    

    总结

    在平时的工作当中,写一些业务代码是无可避免的,但是只要不局限于现状,往往可以发现不一样的乐趣。就像我在报表的业务中学习到了策略模式+工厂模式。

    个人博客网址: https://colablog.cn/

    如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您
    微信公众号

  • 相关阅读:
    Fluent API
    什么是blazor
    10.事务
    9.用ExecuteSqlCommand执行存储过程
    8.自增主键 插入指定主键的数据
    7.图
    6.实体与上下文的关系
    5.并发
    4.跟踪
    3.级联删除
  • 原文地址:https://www.cnblogs.com/Johnson-lin/p/14028372.html
Copyright © 2011-2022 走看看