昨晚我在设计一家物品工厂时陷入了困境,并且我想在这里寻求一些指导。
基本上,我的' CameraFactory'根据可用类型返回指向类的指针,例如' FIXED'或者'免费' (还有更多,但我会保持这个例子简短)。所有这些都继承自CameraBase。
但是,我的问题是因为CameraBase类的实现非常有限,所以用户需要对返回的指针执行static_cast<typeOfCameraRequested*>(returned CameraBaseDerivative*);
。
我觉得通过强迫用户记住&#39;静态转换结果是不好的做法(我在实际实现中没有使用原始指针btw)。但根据我的理解,唯一的另一种方法是创造一个整洁的&#39;工厂实现将包括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));