想象一下,我是汽车制造商的Java软件开发人员。我的任务是创建一个将由众多内部应用程序使用的库。对于制造的每种类型的汽车模型,我创建一个表示该模型的java对象。我必须不仅能够跟踪当前模型,还能跟踪原型模型。原型模型将有一个名称,一旦投入生产,很可能会改变。我需要能够使用库来解释原型,并在切换到生产时使用名称更改进行flex。
我的问题是,对此最好的方法是什么?
以下是我的想法......
我一直在读几本书,以便最好地处理这种情况。我的脑子立刻开始使用工厂模式。我将有一个CarModelFactory类,它将为每个模型返回一个具体对象。例如:
public class CarModelFactory() {
public CarModel createCivicModel() {}
public CarModel createAccordModel() {}
public CarModel createPrototype1() {
return new ModelX();
}
public CarModel createPrototype1() {
return new ModelY();
}
这是最好的方法吗?我觉得应该有另一层抽象。我看到的问题是:
1)如果ModelX投入生产,我为它创建一个方法并在createPrototype1方法中放入其他东西,现在调用该方法的程序得到错误的对象
2)如何处理ModelX更改其名称?
我感谢你的时间!
答案 0 :(得分:2)
工厂模型听起来不错,但我建议使用createCarModel(String model)
方法,在地图中查找相应的对象。然后重命名汽车模型是该地图中的简单添加/删除。当然,通过适当的同步来防止重命名和来自碰撞。
地图可能是Map<String, Class<? extends CarModel>>
,而createCar
方法会使用无参数构造函数实例化该类,您需要使用所有Car
。
这样,无论何时添加或重命名模型都不需要重新编译,因为工厂类不会更改其方法签名集。
此外,如果覆盖ClassLoader
,则可以卸载旧模型并加载新模型,从而允许包含.class文件的实际目录保持干净(此后不再使用旧的原型类)制作成真实的模特)。