基于类型在子类/接口实现之间切换的最佳方法?

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
     }
}