我有以下类结构:
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("...");
}
}
有更好的方法吗?
答案 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();
}
}
根据需要修饰它(例如使用泛型进行更强的类型检查)。
您的方式要求您在每次扩展课程时修改工厂。这无法扩展。