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



假设我们有类似的东西:

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

相关内容

最新更新