我正在重写一些代码,我决定以枚举的方式来重新创建类,因为有固定数量的工作表。这是基于可读性考虑,相对于伸缩构造函数而言,建造者模式更易读。
这段代码会获取一些 .xls 文件,并添加标题(并从其他 .xls 文件中读取一些),可能还会添加一些子表。然后按照特定方式将多个工作表合并在一起,以便制作主 Excel 工作簿上的选项卡。我的问题是,某些工作簿选项卡需要不同数量的工作表作为参数。我试图应用建造者模式。以下是我尝试编写的代码:
public enum workBookSheet {
mySheet1("Name1","mainSheet1.xls",true,1).addSubSheet("pathToSubSheet1.xls"),
mySheet2("Name2","mainSheet2.xls",true,2).addHeaderSheet("pathToHeaders.xls").addSubsheet("pathtoSubSheet2.xls");
private String tabName;
private String mainSheetName;
private Boolean available;
private Integer order;
private String subSheetName;
private String headerSheetName;
private workBookSheet(String tabName, String mainSheetName, Boolean available, Integer order){
this.tabName = tabName;
this.mainSheetName = mainSheetName;
this.available = available;
this.order = order;
}
public workBookSheet addSubSheet(String subSheetName){
this.subSheetName = subSheetName;
return this;
}
public workBookSheet addHeaderSheet(String headerSheetName){
this.headerSheetName = headerSheetName;
return this;
}
}
Java 给我的错误信息似乎在说,Java 希望我枚举声明('enum 构造函数' 的逗号分隔列表)只包含构造函数,而不是其他额外的方法。我可以将这些方法移动到下面的“构建器”方法中,而不会有任何问题。public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
这是在枚举中实现建造者模式的唯一方法吗?它确实需要我运行一个单独的方法,但不会太麻烦。虽然我觉得我正在打破该模式(如果这样能起作用,那也不是什么坏事)。
注:我已经好好地查看了 SO 或网络上的其他地方,看看是否有人提出过这个问题。我找到的最接近的是此处关于 Enums 和 Factories 的问题,但那并没有完全回答我的问题。此外,我知道这不完全是建造者模式,因为我没有一个单独的类,然后接受一个 build() 方法来创建一个新的枚举。我想这是我初始设计中问题的根源,但我对 Java 相对较新。
那么,在 Java 枚举上使用建造者模式的更好方法存在吗?还是我现有的代码已经足够接近了?