В моем приложении есть 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 использует оператор new для создания объектов.
Мое намерение состоит в том, чтобы иметь возможность заменить с помощью плагинов реализацию SomeManagerClass (или любого другого класса) на другую. Для замены реализации необходимо 2 шага:
- Определите класс DerivedSomeManagerClass, который наследует SomeManagerClass [плагин]
- Создайте новый класс (DerivedSomeManagerClass) вместо стандартного (SomeManagerClass) [приложение]
Я предполагаю, что мне нужна какая-то фабрика объектов, но она должна быть довольно простой, поскольку всегда нужно создать только один тип (реализация по умолчанию или реализация пользователя).
Любая идея о том, как спроектировать простую фабрику, как я только что описал? Учтите тот факт, что в будущем может быть больше классов, поэтому их будет легко расширить.
[*] Меня не волнует, если это произойдет более одного раза.
Изменить: обратите внимание, что в TheManager содержится более двух объектов.