En los design patterns de GOF no hay nada parecido a lo que quiere hacer
Personaje, de hecho a mi tambien me parece raro lo de la clase
inicializar...

Los patrones creacionales de GOF son:

1) AbstractFactory que sirve para fabricar una familia relacionada de clases
a partir de una implementacion concreta. Por cada implementacion concreta de
una familia de clases relacionadas tengo un factory.

2) Factory Method, cada clase derivada crea un objeto diferente a travez de
un metodo polimorfico.

3) Builder, Automatiza en una clase un proceso de creacion deun objeto
complejo que se repite, dejando los detalles de la creacion a las subclases.

4) Prototype, sirve para clonar objetos donde la inicializacion o el estado
inicial no importa demasiado.

5) Singleton, crea una unica instancia de una clase usando lazy loading.

Nunguno realiza lo que se requiere,  Pero tal vvez lo que se podria es tener
un pool de objetos y tener una funcion que se invoque al cominenzo que
mediante lazy loading o el uso de singletons los vaya registrando dentro del
pool de objetos.

Saludos
Pablo



El día 7/04/08, Alejandro Marcu <[EMAIL PROTECTED]> escribió:
>
> Lo veo un poco raro, pero tal vez me estoy perdiendo de algo...
>
> - No veo que sentido tiene que Creada herede de Creadora, yo mas bien
> definiria una clase "Creable" con los metodos nombre y crear y que sea
> esa que devuelva Creadora
> - Si Creadora tiene metodos estaticos, que yo sepa no podrias
> intercambiar implementaciones de factory.  Yo haria que Creadora sea
> un Singleton y que Crear y Registrar sean metodos no estaticos que
> devuelvan una clase "Creable".
> - Veo medio raro lo de la clase inicializar, me suena raro tener una
> clase para eso.
>
> Fijate si no los design patterns, capaz que te puede ayudar.
>
>
>
> 2008/4/7 personaje <[EMAIL PROTECTED]>:
>
> > Buenas amigos programadores,
> >
> >    Tengo un problemita bastante complejo que no puedo resolver.
> >
> >    Tengo una clase que tiene dos metodos estáticos Crear y Registrar,
> >  ambos son usados a modo de factoria para crear y registrar clases
> >  derivadas. En código sería algo así:
> >
> >  // CREADORA.H
> >
> >  clase Creadora
> >  {
> >  public:
> >    Creadora(){}
> >    virtual ~Creadora(){}
> >
> >    static Creadora *Crear(std::string nombre);
> >    static bool Registrar(Creadora *pCreador);
> >
> >    virtual std::string Nombre()const=0;
> >    virtual Creadora *Crear()const=0;
> >  };
> >
> >  // CREADA.H
> >
> >  #include "Creadora.h"
> >
> >  clase Creada : public Creadora
> >  {
> >  public:
> >    Creada(){}
> >    virtual ~Creada(){}
> >
> >    virtual std::string Nombre()const{return "Creada";}
> >    virtual Creada *Crear()const{return new Creada;}
> >  };
> >
> >  // CREADA.CPP
> >
> >  #include "Creada.h"
> >
> >  namespace {
> >  class inicializar {
> >  public:
> >    inicializar(){Creadora::Registrar(new Creada;);}
> >    ~inicializar(){}
> >  };
> >
> >  inicializar ini;
> >  }
> >
> >  Con esto logro que la clase Creada sea registrada en Creadora antes de
> >  llegar al main (evitando ejecutar código).
> >
> >  El problema que tengo es que ini no es creado y por lo tanto, no se
> >  ejecuta el código que registra a Creada en Creadora.
> >
> >  Lo raro es que si en otro .cpp, pongo un "new Creada" (incluso si está
> >  en una porción de código que nunca se ejecuta), entonces todo funciona
> >  como quiero, ini es creado, se ejecuta su ctor, se registra Creada en
> >  Creadora, y cuando quiero crear una clase usando
> >  Creadora::Crear("Creada") me retorna la nueva instancia...
> >
> >  Obviamente, mi código es más complejo que esto. En el caso este (tengo
> >  los .cpps) funciona siempre bien, es decir, sin necesidad de agregar
> >  un new Creada. Entonces, la pregunta es : ¿Alguien puede ver que esto
> >  es un *enchastre* monstruoso y sugerir una alternativa o si no es tan
> >  enchastre, decirme dónde estoy pifiando?
> >
> >  Gracias por adelantado
> >  Saludos
> >
> >  _______________________________________________
> >  Lista de correo Programacion.
> >  [email protected]
> >  http://listas.fi.uba.ar/mailman/listinfo/programacion
> >
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a