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/
如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您