Rumah > Soal Jawab > teks badan
@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;
}
Struktur kod sangat serupa, kecuali lapisan dao mengambil data secara berbeza Selain itu, adakah ruang untuk penambahbaikan dalam suis ini, saya tahu bahawa eumn digunakan untuk menghitung, tetapi saya tidak menulisnya untuk mengurangkan kod yang tidak berkaitan.
怪我咯2017-05-17 10:06:56
Kod anda adalah untuk mencipta kelas Option, yang sesuai untuk pemfaktoran semula menggunakan kaedah kilang.
//方法参数尽量少于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);
}
}
Saya tidak akan menerangkan secara terperinci tentang faedah menggunakan kaedah kilang Anda boleh membaca blog saya untuk butiran
给我你的怀抱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;
Cukup keluarkan baris ini dan panggil mereka dalam kaedah
迷茫2017-05-17 10:06:56
Anda boleh mencuba corak reka bentuk templat, yang mengekstrak algoritma biasa ke dalam kelas induk dan meninggalkan bahagian yang berbeza kepada subkelas untuk menulis semula. Jika terdapat lebih sedikit tempat sedemikian, lebih mudah untuk mengekstrak kaedah awam.
高洛峰2017-05-17 10:06:56
Apa yang dinyatakan di atas boleh dilaksanakan, ekstrak bahagian awam dan masukkan ke dalam kaedah awam.
ringa_lee2017-05-17 10:06:56
Kaedah perahan awam yang dinyatakan di atas adalah mudah dan praktikal, tetapi jawapan di tingkat satu terlalu mendalam dan perlu difikirkan dengan teliti