Я реализую абстрактный шаблон фабрики (в C++), но есть небольшая проблема.Заводской шаблон, реализующий динамический список заводов
Я хотел бы избежать создания места, которое должно знать во время компиляции, какие существуют фабрики.
Обычно в примерах я вижу нечто подобное.
Factory * getFactory()
{
if(/*we should make factoryA*/)
{
return FactoryA::instance();
}
else if(/*we should return FactoryB*/)
{
return FactoryB::instance();
}
else
{
return NULL;
}
}
Я мог бы сделать что-то подобное, но я хочу лучше!
То, что я имею в виду, что базовый класс фабрики будет иметь список заводов, каждый класс, унаследованный от Factory бы создать статический экземпляр и добавить этот экземпляр в список, через защищенную функцию класса в Factory.
Однако я не могу понять, как это сделать, не играя русскую рулетку со статической инициализацией объекта.
Что вы пытаетесь достичь? Как вы решаете, какая фабрика должна быть возвращена? Зачем вам нужен список, как бы вы вытащили правильную фабрику из списка? –
Что возвращает FactoryA :: instance()? Возвращает ли он экземпляр фабрики? Возвращает ли он экземпляр нового A? Мой первый взгляд на ваш код заставил меня думать, что функция возвращает фабрики. Если это так, ваш подход, вероятно, неверен. –
@dauphic: Это относительно стандартный шаблон. У вас есть куча фабричных объектов, и вам нужно динамически решать во время выполнения, которое нужно использовать. –