昨晚我在设计对象工厂时遇到了一个难题,并想在这里寻求一些指导。
本质上,我的“CameraFactory”返回指向基于可用类型的类的指针,例如“FIXED”或“FREE”(还有更多,但我会保持这个例子简短)。所有这些都继承自 CameraBase。但是,我的问题是,由于 CameraBase 类的实现非常有限,用户需要对static_cast<typeOfCameraRequested*>(returned CameraBaseDerivative*);
返回的指针执行 a 。
我觉得通过强制用户“记住”静态转换结果是不好的做法(顺便说一句,我在实际实现中没有使用原始指针)。但据我了解,创建“整洁”工厂实现的唯一其他方法是在 CameraBase 中包含派生类的所有成员/方法的接口,以便可以轻松调用派生类。
请问有人可以阐明解决此问题的最佳方法吗?我应该重新设计我的课程吗?如果是这样,它应该是什么样子?泛型?
谢谢!
要考虑的代码:
Class CameraBase {
protected:
SomeDataMember mDataMember;
}
Class FreeCamera : public CameraBase {
public:
void SomeFreeCameraSpecificMethod();
}
class StaticCamera: public CameraBase {
public:
void SomeStaticCameraSpecificMethod();
}
Class CameraFactory {
public:
static BaseCamera* createCamera(CameraTypeEnum _type) {
switch (_type) {
case FREE:
return createFreeCamera();
break;
case STATIC:
return createStaticCamera();
break;
}
}
}
FreeCamera* freeCam = static_cast<FreeCamera*>(CameraFactory::createCamera(FREE));