Объект Фабрика с ограниченным базовым классом

Прошлой ночью я столкнулся с затруднительным положением при проектировании фабрики объектов и подумал, что я бы попросил совета.

По сути, мой «CameraFactory» возвращает указатели на классы, основанные на доступных типах, таких как «FIXED» или «FREE» (и многое другое, но этот пример будет коротким). Все это наследуется от CameraBase.
Однако моя проблема заключается в том, что поскольку класс CameraBase имеет очень ограниченную реализацию, пользователю необходимо выполнить static_cast<typeOfCameraRequested*>(returned CameraBaseDerivative*); на возвращенном указателе.

Я чувствую, что принуждение пользователя «запоминать» статическое приведение приводит к плохой практике (кстати, я не использую необработанные указатели в реальной реализации). Но, насколько я понимаю, единственный другой способ создать «аккуратную» фабричную реализацию — это включить интерфейс ко всем членам / методам производных классов в 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));

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]