根据类型在子类/接口实现之间切换的最佳方法是什么?

时间:2015-05-03 18:18:13

标签: polymorphism

让我们说我们有这样的事情:

    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();
    ...

1 个答案:

答案 0 :(得分:0)

您正在寻找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
     }
}