我可以在Java枚举上使用构建器模式吗?
我正在重写一些代码,并且我已经决定了重新创建类的方法,因为有固定数量的工作表,因此我将它们创建为枚举。这是一个基于构建器模式与伸缩构造函数的可读性的决策。
我所在的代码抓取一些.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声明(顶部的逗号分隔的“enum构造函数”列表)只包含构造函数,而不是其他方法。我可以将这些方法移动到下面的“构建器”方法,而不会抱怨。
public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
这是在枚举上实现生成器模式的唯一方法吗?它确实需要我运行一个单独的方法,这并不太麻烦。IT确实觉得我正在打破这种模式(我想,如果这有效的话,这不是一件坏事。
注意:我仔细观察了一下,看看是否有其他人在SO或网络上的其他地方问过这个问题。我发现最接近的是关于Enums和Factorys的问题,但这并不能完全回答我的问题。另外,我知道这并不是构建器模式,因为我没有一个单独的类来接受一个构建()方法来创建新的枚举。我想这是我最初设计中问题的根源,但我对Java相对较新。
那么有没有更好的方法可以在Java枚举上使用构建器模式呢?还是我所拥有的“足够接近”?