用于灵活创建类的Java最佳实践库(工厂模式,抽象和接口)

时间:2011-03-16 16:14:56

标签: java factory-pattern dynamic-binding

想象一下,我是汽车制造商的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更改其名称?

我感谢你的时间!

1 个答案:

答案 0 :(得分:2)

工厂模型听起来不错,但我建议使用createCarModel(String model)方法,在地图中查找相应的对象。然后重命名汽车模型是该地图中的简单添加/删除。当然,通过适当的同步来防止重命名和来自碰撞。

地图可能是Map<String, Class<? extends CarModel>>,而createCar方法会使用无参数构造函数实例化该类,您需要使用所有Car

这样,无论何时添加或重命名模型都不需要重新编译,因为工厂类不会更改其方法签名集。

此外,如果覆盖ClassLoader,则可以卸载旧模型并加载新模型,从而允许包含.class文件的实际目录保持干净(此后不再使用旧的原型类)制作成真实的模特)。

相关问题