2011-08-21 12 views
5

Soy bastante nuevo en el desarrollo y diseño de C++, por lo que me disculpo de antemano porque mi pregunta es vaga o está mal estructurada. Tengo varias jerarquías distintas y no relacionadas en mi código y me gustaría utilizar una fábrica genérica tal como describió e implementó Alexandrescu para crear instancias de objetos de estas jerarquías.
La parte con la que estoy teniendo problemas es la fase de inicialización. Las clases tienen necesidades de inicialización muy diferentes. En ocasiones, los datos necesarios para la inicialización se pueden buscar desde el almacenamiento (DB) y en esos casos puedo encapsular el procedimiento de inicialización en algún método Init() de la clase específica. Pero otras veces los datos solo se conocen localmente en el momento de la creación de instancias y deben pasarse manualmente al objeto. Estoy luchando por encontrar una manera uniforme de hacer esto. ¿Alguien tiene alguna información sobre los problemas que se avecinan de este tipo? GraciasInicialización de objetos y fábricas de objetos en C++

+0

Alexandrescu también es un entusiasta de las políticas, por lo que podría tener una política de asignación para su fábrica. Sin embargo, si la necesidad concreta de asignación depende de los datos de tiempo de ejecución, entonces supongo que no se puede evitar un asignador de conmutación de tiempo de ejecución. Tal vez registrar una colección de callbacks de asignador ... –

+0

simplemente no use fábricas (para evitar estos problemas). las fábricas pueden resolver algunos problemas, pero muy pocas veces se necesitan. –

+0

Gracias por la respuesta. ¿Podrías explicar a qué te refieres con "asignador de conmutación de tiempo de ejecución" por favor? – stas

Respuesta

4

Estás bajando por la autopista Over-Engineering ... cabeza primero.

Las fábricas rara vez son necesarias, y no hay dos fábricas iguales (como habrá notado).

Es inútil tratar de proporcionar una clase base para todas sus fábricas, porque esta clase base no tendrá una semántica clara. ¿Qué construye? Bird s? Car s? No están relacionados ... Object s? ¡Esto no es Java!

Si desea utilizar fábricas (por alguna razón), entonces un Factory debería producir tipo de objetos, todo deriva de una clase base común. Si tiene varios tipos de objetos, necesitará varios tipos de fábricas.

Y si encuentra que el código de Fábrica es repetitivo, use una plantilla para izar el código común.

0

Si adiviné correctamente, su problema es que no sabe cómo pasar diferentes conjuntos de argumentos a sus métodos de fábrica. Si es así, puedo aconsejarle que cree una jerarquía más/Vamos a llamarlo FactoryHelper. La clase concreta de esta jerarquía contendrá datos específicos para la instanciación de sus clases concretas, por ejemplo FactoryHelperA para ConcreteProductA contendrá una cadena y FactoryHelperB para ProductB contendrá int. Un método abstracto de su fábrica debe aceptar clases base abstractas: FactoryHelper como argumento. Los métodos concretos de su fábrica arrojarán este argumento al FactoryHelperA concreto o FactoryHelperB y obtendrán datos de specefic para la instanciación del producto specefic

Pero su diseño no es muy bueno. Supongo que estás tratando de usar los métodos de fábrica de la manera incorrecta.