是否有更好的方法来实现具有两个条件的简单工厂?

时间:2015-11-06 11:25:11

标签: java if-statement design-patterns factory

我有以下类结构:

MyClass
  FirstClass
    FirstClassVersion1
    FirstClassVersion2
  SecondClass
    SecondClassVersion1
    SecondClassVersion2

在某一点上,我需要根据类号和类版本引用MyClass,所以我创建了一个简单的工厂。但我的工厂有点复杂如下:

public class MyClassFactory {

    public static MyClass createMyClass(int classNumber, int classVersion) throws Exception {
        if (classNumber == 1) {
            if (classVersion == 1) {
                return new FirstClassVersion1();
            } else if (classVersion == 2) {
                return new FirstClassVersion2();
            }
        } else if (classNumber == 2) {
            if (classVersion == 1) {
                return new SecondClassVersion1();
            } else if (classVersion == 2) {
                return new SecondClassVersion2();
            }
        }

        throw new Exception("...");
    }
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这是另一个想法:

public class MyClassFactory {

    private MyClassFactory instance = new MyClassFactory();

    private MyClassFactory() {}

    public MyClassFactory getInstance() { return instance; }

    public MyClass create(Class clazz) throws Exception {
       return clazz.newInstance();
    }
}

根据需要修饰它(例如使用泛型进行更强的类型检查)。

您的方式要求您在每次扩展课程时修改工厂。这无法扩展。