确保物体在施工前或施工期间的有效性

时间:2014-04-14 06:10:26

标签: java oop

我正在塑造一辆有颜色的汽车。 我想确保颜色是有效的。所以我在Car类中创建了一个嵌套的枚举,它将保存有效的颜色。我想理解这个想法:

  1. 有人应该如何制造汽车?
    • 揭露枚举。并在构造函数中期望枚举值。这确保了有效的颜色。
    • enum是我的!我班级的用户不需要了解它!我会让他给我一个字符串,我将解析任何枚举值。如果它无效,我将抛出异常
  2. 我更倾向于暴露。有什么理由我不想这样做吗?例如,可能会因创建汽车实例而使用户过于复杂? (虽然我猜他会比运行时例外更喜欢这个。)

    你怎么说?

3 个答案:

答案 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的所在; - )

您还应该考虑进一步使用汽车类。如果您需要在另一个上下文中获取汽车的颜色,您还需要返回枚举而不是字符串,这意味着您必须将其公之于众。

如果认为工厂模式不适用于您的情况,但如果不了解您的汽车类使用的整个背景,很难说。