Maison > Questions et réponses > le corps du texte
@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;
}
La structure du code est très similaire, sauf que la couche dao récupère les données différemment. De plus, y a-t-il place à l'amélioration dans ce commutateur. Je sais qu'eumn est utilisé pour énumérer, mais je ne l'ai pas écrit pour réduire le code non pertinent
.怪我咯2017-05-17 10:06:56
Votre code consiste à créer la classe Option, qui convient à la refactorisation à l'aide de méthodes d'usine.
//方法参数尽量少于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;
}
}
@Component
class 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());
}
}
@Component
class 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);
}
}
Je n'entrerai pas dans les détails sur les avantages de l'utilisation des méthodes d'usine. Vous pouvez lire mon blog pour plus de détails
.给我你的怀抱2017-05-17 10:06:56
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;
Extrayez simplement ces lignes et appelez-les dans une méthode
迷茫2017-05-17 10:06:56
Vous pouvez essayer le modèle de conception de modèle, qui extrait les algorithmes communs dans la classe parent et laisse différentes parties à la sous-classe pour la réécriture. S'il y a moins de tels endroits, il est plus facile d'extraire une méthode publique.
高洛峰2017-05-17 10:06:56
Ce qui a été dit ci-dessus est réalisable, extrayez la partie publique et encapsulez-la dans une méthode publique.
ringa_lee2017-05-17 10:06:56
La méthode d'extraction publique mentionnée ci-dessus est simple et pratique, mais la réponse au premier étage est trop profonde et doit être réfléchie attentivement