0

昨晚我在设计对象工厂时遇到了一个难题,并想在这里寻求一些指导。

本质上,我的“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));
4

0 回答 0