@Override
public Option getTrafficChartOption(String type, ReportType reportType, Integer deviceId, Integer direction) {
Integer device = deviceId + 1010000;
List<ChartData> data = chartDao.getTrafficChartData(reportType,device,direction);
String title = Titlehelper.getChartTitle(reportType);
String subtitle = Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,direction);
Option option = new Option();
switch (type){
case "bar":
option = BarOption.BarOptionBuiler(title, subtitle, data);
break;
case "line":
option = LineOption.OptionBuilerhelp(title, subtitle, data);
break;
case "pie":
option = PieOption.PieOptionbuilder(title, subtitle, data);
break;
}
return option;
}
@Override
public Option getAmmeterChartOption(String type, ReportType reportType, Integer deviceId) {
List<ChartData> data = chartDao.getAmmeterDataChartData(reportType,deviceId);
String title = Titlehelper.getChartTitle(reportType);
String subtitle = Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);
Option option = new Option();
switch (type){
case "bar":
option = BarOption.BarOptionBuiler(title, subtitle, data);
break;
case "line":
option = LineOption.OptionBuilerhelp(title, subtitle, data);
break;
case "pie":
option = PieOption.PieOptionbuilder(title, subtitle, data);
break;
}
return option;
}
程式碼結構非常相似,只是dao層取資料不一樣,另外這個switch有沒有改進空間,我知道使用eumn來枚舉,沒寫以減少無關程式碼
你的程式碼是要建立Option類,適合使用工廠方法重構。
使用工廠方法的好處就不多說了,具體可以閱讀我的部落格
這幾行提取出來放在一個方法裡呼叫不就行了
可以試試看模板設計模式吧,將通用的演算法提取到父類別中,不同的地方交給子類別重寫。如果這樣的地方少些,還是提取一個公共方法,比較省事。
樓上說的可行,提取公共部分封裝成一個公共方法。
樓上說的提取公共方法簡單實用,一樓的答案太高深,需要好好琢磨一下