我们说有一个基类
class Base
{
}
并且用户已创建新的子类
class NewDerivedClass : public Base
{
}
还有一个所有子类的枚举:
enum SubclassId
{
Derived1_Id,
Derived2_Id,
...
NewDerivedClass_Id // User has to add this line
}
现在,还有一个工厂根据SubclassId
创建派生实例:
class SubclassFactory
{
Base* CreateSubclassInstance(SubclassId subclassId)
{
switch(subclassId)
{
case SubclassId::Derived1_Id:
return new Derived1(params);
case SubclassId::Derived2_Id:
return new Derived2(params);
...
// User has to add the following lines:
case SubclassId::NewDerivedClass_Id:
return new NewDerivedClass(params);
}
}
}
Base
课程的用户在枚举中添加新的Id
?Base
班级的用户在SubclassFactory
中创建该实例?在最好的情况下,我希望看到编译时错误。单位测试解决这个问题也是可以接受的。
补充资料。
1. Base
类的用户在客户端创建新的子类
2.我的代码在后端运行。我远程获取子类id并使用Factory
来创建客户端程序员创建的子类的实例。