我有两个实现命令的类(使用命令模式),一个是创建表:
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/