构造函数的巨型switch语句

Set*_*gie 5 c++ inheritance construction class-hierarchy switch-statement

我有一个容器,它包含一堆指向基类的指针,以及一个接受一些输入并返回一个类的函数,该类是基类的子类.它返回的子类取决于输入.

现在,我有一个像这样的巨型开关语句:

class Base { ... }

class A : public Base { ... }
class B : public Base { ... }
...
class Z : public Base { ... }

Base* depends(int input) {
    switch (input) {
    case 1:
        return new A(...);
    case 2:
        return new B(...);
    ...
    case 26:
        return new Z(...);
    default:
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来设计它.我不知道很多"设计模式"(我认为这就是他们所谓的)所以我不知道是否有一种(明显的)更好的方法来设计它.

Alo*_*ave 6

您正在寻找的是工厂方法模式.

这里重要的是消除Base类需要了解派生类实现的知识.对于Base类来说,了解Derived类是一个糟糕的设计.

Factory Method模式解决了上述问题,因为创建发生在Base类之外.