我正在塑造一辆有颜色的汽车。 我想确保颜色是有效的。所以我在Car类中创建了一个嵌套的枚举,它将保存有效的颜色。我想理解这个想法:
我更倾向于暴露。有什么理由我不想这样做吗?例如,可能会因创建汽车实例而使用户过于复杂? (虽然我猜他会比运行时例外更喜欢这个。)
你怎么说?答案 0 :(得分:0)
考虑工厂模式。您可以隐藏那里的所有检查和颜色处理代码,您的Car
可以保持原样(使用Color
作为枚举参数)。工厂没有构造函数的限制,您可以随意为您的方法命名,例如:
public class CarFactory{
public static Car createRedCar() { return new Car(Color.RED); }
public static Car createBlueCar(){ return new Car(Color.BLUE); }
}
答案 1 :(得分:0)
工厂解决方案很优雅,但每次需要添加新颜色时都会强制您添加新方法。如果你想添加类似"轮数和#34;之类的东西,那么你就麻烦了,因为你会把工厂方法的数量增加一倍。我会坚持暴露解决方案。它非常容易理解,为您提供了一些灵活性(添加一种新颜色,就像在枚举类中添加一行一样简单)并且它具有非常Java的风格。你知道,Java它非常冗长!但这只是一种意见。
答案 2 :(得分:0)
我认为在这种情况下暴露枚举不是问题。使用字符串的方法对于有效值并不是非常安全。使用枚举显式定义哪些值有效。毕竟这就是enums的所在; - )
您还应该考虑进一步使用汽车类。如果您需要在另一个上下文中获取汽车的颜色,您还需要返回枚举而不是字符串,这意味着您必须将其公之于众。
如果认为工厂模式不适用于您的情况,但如果不了解您的汽车类使用的整个背景,很难说。