SpringBoot使用策略模式+工廠模式

  • 2020 年 11 月 24 日
  • 筆記

為了防止大量的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

總結

在平時的工作當中,寫一些業務代碼是無可避免的,但是只要不局限於現狀,往往可以發現不一樣的樂趣。就像我在報表的業務中學習到了策略模式+工廠模式。

個人博客網址: //colablog.cn/

如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您
微信公眾號