java - 重复代码命令类 Java

标签 java command code-duplication

我有两个实现命令的类(使用命令模式),一个是创建表:

public class CommandCreateSheet implements Command {

    private Workbook workbook;
    private String sheetName;

    public CommandCreateSheet(Workbook workbook, String workSheetName) {
        this.workbook = workbook;
        this.sheetName = workSheetName;
    }

    @Override
    public void execute() {
        this.workbook.addSheet(this.sheetName);
    }

    @Override
    public void undo() {
        this.workbook.removeSheet(this.sheetName);
    }
}

另一个是删除:

public class CommandDeleteSheet implements Command {

    private Workbook workbook;
    private String sheetName;

    public CommandDeleteSheet(Workbook workbook, String workSheetName) {
        this.workbook = workbook;
        this.sheetName = workSheetName;
    }

    @Override
    public void execute() {
        this.workbook.removeSheet(this.sheetName);
    }

    @Override
    public void undo() {
        this.workbook.addSheet(this.sheetName);
    }
}

如何避免这种重复的代码?

谢谢!!

最佳答案

您可以创建两个命令都实现的中间抽象类。

public abstract class AbstactSheetCommand implements Command
{
    private Workbook workbook;
    private String sheetName;

    protected AbstractSheetCommand(Workbook workbook, String workSheetName)
    {
        this.workbook = workbook;
        this.sheetName = workSheetName;
    }

    public abstract void execute();
    public abstract void undo();
}

然后你的子类就会小得多:

public class CommandCreateSheet extends AbstractSheetCommand
{
    public CommandCreateSheet(Workbook workbook, String workSheetName)
    {
        super(workbook, workSheetName);
    }

    @Override
    public void execute() { this.workbook.addSheet(this.sheetName); }

    @Override
    public void undo() { this.workbook.removeSheet(this.sheetName);}
}

public class CommandDeleteSheet extends AbstractSheetCommand
{
    public CommandDeleteSheet(Workbook workbook, String workSheetName)
    {
        super(workbook, workSheetName);
    }

    @Override
    public void execute() { this.workbook.removeSheet(this.sheetName); }

    @Override
    public void undo() { this.workbook.addSheet(this.sheetName); }
}

这样做的好处是,您可以轻松添加位于同一“类别”(可以这么说)中的具有更具体功能的新命令。

public class CommandRenameSheet extends AbstractSheetCommand
{
    private String newWorkSheetName;

    public CommandDeleteSheet(Workbook workbook, String oldWorkSheetName, String newWorkSheetName)
    {
        super(workbook, oldWorkSheetName);
        this.newWorkSheetName = newWorkSheetName;
    }

    @Override
    public void execute() 
    { this.workbook.renameSheet(this.sheetName, newWorkSheetName); }

    @Override
    public void undo() 
    { this.workbook.renameSheet(newWorkSheet, this.sheetName); }
}

关于java - 重复代码命令类 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33155900/

相关文章:

java - 我需要让扫描仪检查输入是否为 "quit",如果不是,则接受一个整数

java - WildFly - 创建具有长时间运行的应用程序的应用程序

string - 在 bash 上使用 test 命令比较两个字符串时,由于特殊字符 * 导致出现 "test: too many arguments"消息

process - 如何将 std::process::Command 转换为命令行字符串?

python - 避免 Python 代码中的代码重复

c++ - 如何在开发过程中检测代码重复?

java - 使 Android/Java 代码更高效 - 删除重复项

java - 尝试发送验证邮件时收到来自谷歌的警告

Java如何在Mac上用命令打开url?

java - 边界问题