基于类型在子类/接口实现之间切换的最佳方法?
Best way to switch between subclasses / interface implementations based on type?
假设我们有这样的东西:
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();
...
您正在寻找 Factory Method - 一种根据某些参数创建对象的方法。在您的情况下,该方法将类似于:
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
}
}
假设我们有这样的东西:
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();
...
您正在寻找 Factory Method - 一种根据某些参数创建对象的方法。在您的情况下,该方法将类似于:
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
}
}