@OverridepublicOptiongetTrafficChartOption(Stringtype,ReportTypereportType,IntegerdeviceId,Integerdirection){Integerdevice=deviceId+1010000;Listdata=chartDao.getTrafficChartData(reportType,device,direction);Stringtitle=Titlehelper.getChartTitle(reportType);Stringsubtitle=Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,direction);Optionoption=newOption();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;}returnoption;}@OverridepublicOptiongetAmmeterChartOption(Stringtype,ReportTypereportType,IntegerdeviceId){Listdata=chartDao.getAmmeterDataChartData(reportType,deviceId);Stringtitle=Titlehelper.getChartTitle(reportType);Stringsubtitle=Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);Optionoption=newOption();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;}returnoption;}代码结构非常相似,只是dao层取数据不一样,另外这个switch有没有改进空间,我知道使用eumn来枚举,没写以减少无关代码
2 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
你的代码是要创建Option类,适合使用工厂方法重构。//方法参数尽量少于3个,3个以上时建议使用组合对象classOptionParam{privateStringtype;privateReportTypereportType;privateIntegerdiviceId;privateIntegerdirection;//getterandsetter}//Option抽象工厂,每个具体工厂都必须继承自抽象工厂publicabstractclassAbstractOptionFactory{@AutowiredChartDaochartDao;//希望具体工厂实现的方法,交于具体工厂实现abstractListgetData(OptionParamoptionParam); abstractStringgetSubtitle(OptionParamoptionParam);//公共逻辑代码,创建对象调用该方法publicOptioncreate(OptionParamoptionParam){assertoptionParam!=null;assertoptionParam.getReportType()!=null;Stringtype=optionParam.getType();Listdata=getData(optionParam); Stringtitle=Titlehelper.getChartTitle(optionParam.getReportType());Stringsubtitle=getSubtitle(optionParam);Optionoption=newOption();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;}returnoption;}}@ComponentclassTrafficChartOptionFactoryextendsAbstractOptionFactory{@OverrideListgetData(OptionParamoptionParam){ returnchartDao.getTrafficChartData(optionParam.getReportType(),optionParam.getDiviceId(),optionParam.getDirection());}@OverrideStringgetSubtitle(OptionParamoptionParam){returnTitlehelper.gettrafficSubText(optionParam.getReportType().getReportTime(),optionParam.getDiviceId(),optionParam.getDirection());}}@ComponentclassAmmeterChartOptionFactoryextendsAbstractOptionFactory{@OverrideListgetData(OptionParamoptionParam){ returnchartDao.getAmmeterDataChartData(optionParam.getReportType(),optionParam.getDiviceId());}@OverrideStringgetSubtitle(OptionParamoptionParam){returnTitlehelper.gettrafficSubText(optionParam.getReportType().getReportTime(),optionParam.getDiviceId(),1);}}使用工厂方法的好处就不多说了,具体可以阅读我的博客
手掌心
TA贡献1942条经验 获得超3个赞
Stringtitle=Titlehelper.getChartTitle(reportType);Stringsubtitle=Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);Optionoption=newOption();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;}returnoption;这几行提取出来放在一个方法里调用不就行了
添加回答
举报
0/150
提交
取消
