En mi aplicación, hay 10-20 clases que se instancian una vez [*]. He aquí un ejemplo:¿Cómo diseñar una fábrica simple de objetos en C++?
class SomeOtherManager;
class SomeManagerClass {
public:
SomeManagerClass(SomeOtherManager*);
virtual void someMethod1();
virtual void someMethod2();
};
instancias de las clases están contenidas en un objeto:
class TheManager {
public:
virtual SomeManagerClass* someManagerClass() const;
virtual SomeOtherManager* someOtherManager() const;
/** More objects... up to 10-20 */
};
Actualmente TheManager utiliza el operador nuevo con el fin de crear objetos.
Mi intención es poder reemplazar, usando complementos, la implementación SomeManagerClass (o cualquier otra clase) con otra. Con el fin de sustituir la aplicación, son necesarios 2 pasos:
- definir un DerivedSomeManagerClass clase, que hereda SomeManagerClass [Plugin]
- Crear la nueva clase (DerivedSomeManagerClass) en lugar del predeterminado (SomeManagerClass) [aplicación]
Supongo que necesito algún tipo de fábrica de objetos, pero debería ser bastante simple ya que siempre hay solo un tipo para crear (la implementación predeterminada o la implementación del usuario).
¿Alguna idea sobre cómo diseñar una fábrica simple como la que acabo de describir? Considere el hecho de que podría haber más clases en el futuro, por lo que debería ser fácil de ampliar.
[*] No me importa si sucede más de una vez.
Editar: Tenga en cuenta que hay más de dos objetos que están contenidos en TheManager.
¿Desea reemplazar las instancias de SomeManagerClass en tiempo de ejecución o en tiempo de diseño? –
SomeManagerClass solo se crea una vez, al inicio de la aplicación, por lo que quiero cambiar esta creación. Debe estar en tiempo de ejecución, ya que el código que reemplaza la implementación predeterminada reside en un complemento dinámicamente vinculado. – kshahar
FWIW, creo que cada vez que nombra una clase "Manager", es porque no sabe lo que realmente hace. También puede llamarlo "caja" o "cosa". El nombre es un olor, imho. – metao