java - 避免在抽象类的子类上重复代码

标签 java oop design-patterns abstract-class

我正在开发一个旧的 Struts 应用程序,它具有通过填充 Excel 模板文件来创建 Excel 导出的抽象操作。

每个 Excel 导出操作都扩展了这个父类并添加了自己的实现来填充 Excel 模板并定义了自己的模板和输出文件名。

public abstract class ExcelExportAction extends BaseAction {
    protected abstract String getInputFilename();
    protected abstract String getOutputFilename();
    protected abstract HSSFWorkbook modifyWorkbook(HSSFWorkbook workbook, HttpServletRequest request);

    @Override
    protected final ActionForward run(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
    throws Exception {

        Workbook workbook = new Workbook(getInputFilename());
        workbook = modifyWorkbook(workbook, request);
        addWorkBookToResponse(workbook, getOutputFilename());       

        return null;
    }
...
}

实现看起来像这样,这是 SonarQube“警告”代码重复的地方:

public class BudgetReportExcelAction extends ExcelExportAction {
    private static final String INPUT_FILENAME = "Report-Budget-Template.xls";
    private static final String OUTPUT_FILENAME = "Report-Customerbudget.xls";

    @Override
    protected String getInputFilename() {
        return INPUT_FILENAME;
    }
    @Override
    protected String getOutputFilename() {
        return OUTPUT_FILENAME;
    }
    @Override
    protected HSSFWorkbook modifyWorkbook(HSSFWorkbook workbook, HttpServletRequest request) {
        /* modify the workbook */
        return workbook;
    }
}

关于如何避免重复的任何想法?

最佳答案

我在这里看到的代码中几乎没有任何代码重复,但是如果你真的想“从石头上挤水”,你可以在基类中添加一个构造函数,它接受输入文件名和输出-文件名,并使每个派生类将其输入文件名和输出文件名传递给基类的构造函数。

关于java - 避免在抽象类的子类上重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759909/

相关文章:

Java:将库导入多个类

java - 架构设计困境。什么是最好的设计?

java - FTP设计模式

java - 整数的最后 n 位

java - 使用java在linux上触发adb命令

c# - 它不会返回类中的值

java - 多态性的有效使用?

java - 用于非常标准对象模型的 DSL,带有到 SQL DB 的映射

java - 配置 JPA 以与任何 JPA 实现配合使用的正确方法

design-patterns - 这是一条管道,一条责任链,还是其他什么?