【发布时间】:2016-01-05 17:15:50
【问题描述】:
假设我有一个简单的 Java 枚举:
public Enum itemType
{
FRUITS("fru"),
VEGETABLES("veg"),
LIQUOURS("liq"),
SODAS("sod");
private String dbCode;
public ItemType(String dbCode){
this.dbCode = dbCode;
}
public String getDbCode(){
return this.dbCode;
}
}
我现在想为这个枚举引入一个“类别”,例如区分液体物品和固体物品。我在枚举类中找到了两种方法,见下文。但是,两者都遭受相同的反模式:如果类别的数量或项目的数量曾经增加/减少(想象一下 100 个项目类型和 10 个类别!),我有很多更新要做。我可以使用哪些模式来设计此枚举,使其尽可能干净且可重用?
第一种方法:向枚举添加额外的属性
public Enum itemType
{
FRUITS("fru",false),
VEGETABLES("veg",false),
LIQUOURS("liq",true),
SODAS("sod",true);
private String dbCode;
private boolean liquid;
public ItemType(String dbCode, boolean liquid){
this.dbCode = dbCode;
this.liquid = liquid;
}
public String getDbCode(){
return this.dbCode;
}
public boolean isLiquid(){
return this.liquid;
}
}
第二种方法:使用静态方法询问子类别
public Enum itemType
{
FRUITS("fru"),
VEGETABLES("veg"),
LIQUOURS("liq"),
SODAS("sod");
private String dbCode;
public ItemType(String dbCode){
this.dbCode = dbCode;
}
public String getDbCode(){
return this.dbCode;
}
public static boolean isLiquid(ItemType type){
switch(t){
case SODA:
case LIQOURS: return true;
default: return false;
}
}
【问题讨论】:
-
如果你有很多类别,为什么不添加一个类实例而不是真/假、字符串、整数等?该类可以包含该特定枚举的所有属性。
-
假设每个枚举类型都有一个具有许多属性的 pojo 类。这些属性最终将是布尔值、字符串等。您认为我如何轻松设置所有这些属性(每种枚举类型将具有不同的属性值组合......)?
标签: java design-patterns enums