1

想象一下,我是一家汽车制造商的 Java 软件开发人员。我的任务是创建一个可供众多内部应用程序使用的库。对于制造的每种类型的汽车模型,我创建一个表示该模型的 java 对象。我必须不仅能够跟踪当前模型,而且还能够跟踪原型模型。原型模型将有一个名称,一旦投入生产,该名称很可能会发生变化。我需要能够使用该库来解释原型,并在它们切换到生产时使用名称更改。

我的问题是,最好的方法是什么?

以下是我的想法...

我一直在阅读几本书,以获得最好的处理这种情况的想法。我立刻想到使用工厂模式。我会有一个 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 更改名称?

我感谢你的时间!

4

1 回答 1

2

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

该映射可能是Map<String, Class<? extends CarModel>>,并且该createCar方法将使用无参数构造函数实例化该类,您将需要所有Cars。

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

此外,如果您覆盖ClassLoader,您可以卸载旧模型并加载新模型,从而使包含您的 .class 文件的实际目录保持干净(没有旧的原型类已被制成真实模型)。

于 2011-03-16T17:01:04.037 回答