假设我们有类似的东西:
abstract class Object {
void foo(){
...
}
}
class ObjectA extends Object {
...
}
class ObjectB extends Object {
...
}
class ObjectC extends Object {
...
}
根据类型,在一组扩展类之间切换的最佳方法是什么?我不喜欢以下解决方案,感觉很脏:
...
Object obj;
switch(type) {
case "A":
obj = new ObjectA();
break;
case "B":
obj = new ObjectB();
break;
case "C":
obj = new ObjectC();
break;
default:
Throw error? Assign some default?
}
obj.foo();
...
您正在寻找一种工厂方法 - 一种基于某些参数创建对象的方法。在您的情况下,该方法看起来像:
Object ObjectFactory(string type)
{
switch(type) {
case "A":
return new ObjectA();
case "B":
return new ObjectB();
case "C":
return new ObjectC();
default:
// Indicate error somehow
}
}