java - Penduaan kod dan mencari cara untuk memperbaikinya
PHPz
PHPz 2017-05-17 10:04:56
0
5
892
    @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.

PHPz
PHPz

学习是最好的投资!

membalas semua(5)
刘奇

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

给我你的怀抱
        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

迷茫

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.

小葫芦

Apa yang dinyatakan di atas boleh dilaksanakan, ekstrak bahagian awam dan masukkan ke dalam kaedah awam.

左手右手慢动作

Kaedah perahan awam yang dinyatakan di atas adalah mudah dan praktikal, tetapi jawapan di tingkat satu terlalu mendalam dan perlu difikirkan dengan teliti

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan