В моем приложении есть 10-20 классов, которые создаются один раз [*]. Вот пример:
class SomeOtherManager;
class SomeManagerClass {
public:
SomeManagerClass(SomeOtherManager*);
virtual void someMethod1();
virtual void someMethod2();
};
Экземпляры классов содержатся в одном объекте:
class TheManager {
public:
virtual SomeManagerClass* someManagerClass() const;
virtual SomeOtherManager* someOtherManager() const;
/** More objects... up to 10-20 */
};
В настоящее время TheManager использует новый оператор для создания объектов.
Мое намерение состоит в том, чтобы заменить, используя плагины, реализацию SomeManagerClass (или любого другого класса) с другой. Чтобы заменить реализацию, необходимо выполнить 2 шага:
- Определить класс DerivedSomeManagerClass, который наследует SomeManagerClass [плагин]
- Создайте новый класс (DerivedSomeManagerClass) вместо стандартного (SomeManagerClass) [application]
Я предполагаю, что мне нужен какой-то объект factory, но он должен быть довольно простым, так как всегда существует только один тип для создания (реализация по умолчанию или реализация пользователя).
Любая идея о том, как создать простой factory, как я только что описал? Рассмотрите тот факт, что в будущем может быть больше классов, поэтому его легко расширить.
[*] Мне все равно, если это происходит более одного раза.
Изменить: Обратите внимание, что в TheManager содержится более двух объектов.