我试图实现一个可能只有一组已定义对象的类。这些物体显然具有所有相同的属性,但只是这些属性的值不同。
作为一个例子,想到类车。它有属性名称和ps。应该(仅)可以创建以下对象:
不应该初始化即具有名称的汽车:'保时捷',PS:500; 在继续编码时,此列表可能会更改或扩展。
将类型创建为汽车的子类,在构造函数中设置它的值是一个好主意吗?或者设置某种工厂/创作者模式是否明智?
非常感谢你的想法 西蒙
答案 0 :(得分:0)
创建子类取决于您的需求。基本上,如果您需要以某种方式有所不同的行为,请继续使用Factory创建子类。
如果您只需要使用取决于其他值的值来填充Car,则可以使用Builder pattern。
如果您的对象值是具体的,并且您只需要从某种模板开始,请使用Prototype。
答案 1 :(得分:0)
基本上,您希望隐藏构造过程的详细信息。由于您没有子类,因此具有Factory,Prototype和Builder的GoF解决方案可能过度设计。
我在使用静态初始化程序之前在Java游戏中解决了这个问题。以下示例显示了游戏中标准的武器配置。
public class Weapon {
...
public static final Weapon
DAGGER = new Weapon("Dagger", 0, 1, -1, true, false),
RAPIER = new Weapon("Rapier", 9, 1, 0, false, false),
CLUB = new Weapon("Club", 9, 1, 0, true, false),
...
}
您以Weapon.DAGGER
等方式访问对象。我没有这样做,但可以/应该使构造函数变为私有。因此,其他人无法实例化武器类的无效变体。
如果需要具有相同配置的对象的多个实例,则替代构造函数可以采用枚举值,例如PORSCHE350,并且它将为该对象构造适当的值。
这种控制的极端案例将使用Object Constraint Language (OCL)之类的东西。