亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java - 代碼重復求改進方法

瀏覽:104日期:2023-12-05 16:47:01

問題描述

@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來枚舉,沒寫以減少無關代碼

問題解答

回答1:

你的代碼是要創建Option類,適合使用工廠方法重構。

//方法參數盡量少于3個,3個以上時建議使用組合對象class OptionParam { private String type; private ReportType reportType; private Integer piceId; private Integer direction; //getter and setter}//Option抽象工廠,每個具體工廠都必須繼承自抽象工廠public abstract class AbstractOptionFactory { @Autowired ChartDao chartDao; //希望具體工廠實現的方法,交于具體工廠實現 abstract List<ChartData> getData(OptionParam optionParam); abstract String getSubtitle(OptionParam optionParam); //公共邏輯代碼,創建對象調用該方法 public Option create(OptionParam optionParam) {assert optionParam != null;assert optionParam.getReportType() != null;String type = optionParam.getType();List<ChartData> data = getData(optionParam);String title = Titlehelper.getChartTitle(optionParam.getReportType());String subtitle = getSubtitle(optionParam);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; }}@Componentclass TrafficChartOptionFactory extends AbstractOptionFactory { @Override List<ChartData> getData(OptionParam optionParam) {return chartDao.getTrafficChartData(optionParam.getReportType(),optionParam.getpiceId(),optionParam.getDirection()); } @Override String getSubtitle(OptionParam optionParam) {return Titlehelper.gettrafficSubText(optionParam.getReportType().getReportTime(),optionParam.getpiceId(),optionParam.getDirection()); }}@Componentclass AmmeterChartOptionFactory extends AbstractOptionFactory { @Override List<ChartData> getData(OptionParam optionParam) {return chartDao.getAmmeterDataChartData(optionParam.getReportType(), optionParam.getpiceId()); } @Override String getSubtitle(OptionParam optionParam) {return Titlehelper.gettrafficSubText(optionParam.getReportType().getReportTime(),optionParam.getpiceId(),1); }}

使用工廠方法的好處就不多說了,具體可以閱讀我的博客

回答2:

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;

這幾行提取出來放在一個方法里調用不就行了

回答3:

可以試試模板設計模式吧,將通用的算法提取到父類中,不同的地方交給子類重寫。如果這樣的地方少些,還是提取一個公共方法,比較省事。

回答4:

樓上說的可行,提取公共部分封裝成一個公共方法。

回答5:

樓上說的提取公共方法簡單實用,一樓的答案太高深,需要好好琢磨一下

標簽: java
相關文章:
主站蜘蛛池模板: 在线免费一级片 | 东京不太热视频高清在线 | 亚洲精品国产一区二区 | 521香蕉永久播放地址 | 亚洲二区在线观看 | 91视频国内 | 国产小视频精品 | 久久久久国产成人精品 | 爱爱免费看 | 国产精品果冻传媒在线 | 欧美xxxx69tube8护士 | 天天综合天天影视色香欲俱全 | a级黄毛片 | 欧美日本韩国一区 | 国产小视频福利 | 成年超爽大片免费视频播放 | 国产成人99久久亚洲综合精品 | 99久久精品国产综合一区 | 亚洲线精品一区二区三区 | 国产成人免费永久播放视频平台 | 爽的毛片 | 国产足控福利视频入口 | 激情在线播放免费视频高清 | 国产成人无精品久久久 | 国产a久久精品一区二区三区 | 国内精品久久久久久影院老狼 | 调教套上奶牛榨乳器喷奶水 | 青青热久免费精品视频网站 | 小黄色片 | 欧洲三级| 国产欧美日韩精品第一区 | 久热香蕉在线爽青青 | 国产乱人伦精品一区二区 | 久久亚洲美女久久久久 | 免费视频黄 | 午夜看一级特黄a大片 | 中国明星一级毛片免费 | 三级毛片在线 | 亚洲无圣光一区二区 | 中文字幕精品一区二区日本大胸 | 亚洲日韩男人网在线 |