我的问题与Need a design pattern to remove enums and switch statement in object creation 中的问题或多或少相同但是我认为抽象工厂模式在这里并不适合。
我目前正在计划重构/重新实现一些现有的 DAL/ORM 混合库。在现有代码的某处,有如下代码:
class Base
{
static Base * create(struct Databasevalues dbValues)
{
switch(dbValues.ObjectType)
{
case typeA:
return new DerivedA(dbValues);
break;
case typeB:
return new DerivedB(dbValues);
break;
}
}
}
class DerivedA : public Base
{
// ...
}
class DerivedB : public Base
{
// ...
}
因此,负责数据库通信的库会使用有关数据库实体的所有信息填充一个结构,然后调用上述 create() 方法在 ORM 中实际创建相应的对象。但我不喜欢基类知道其所有派生类的想法,我也不喜欢 switch 语句。我也想避免仅仅为了创建这些对象而创建另一个类。您如何看待目前的做法?您将如何实现此功能?