Te envio un ejemplo del Factory Method que a mi me esta funcionando, te
debería valer. Si la generaciónn de clases es más compleja hechale un
vistazo al Abstract Factory, como ha comentado Hari, pero el Factory Method
es más facil de entender para comenzar con ello.


// IModulo.as
// Interface que implementan todos los modulos
interface IModulo{
        function mostrarContenido();
}

// Modulo1.as
class Modulo1 implements IModulo{
        private var contenido:String;
        
        function Modulo1(c:String){
                contenido = c;
        }
        
        public function mostrarContenido(){
                trace("Modulo 1 muestra: "+contenido);
        }
}

// Modulo2.as
class Modulo2 implements IModulo{
        private var contenido:String;
        
        function Modulo2(c:String){
                contenido = c;
        }
        
        public function mostrarContenido(){
                trace("Modulo 2 muestra: "+contenido);
        }
}

// ModulosFactory.as
class ModulosFactory{
        // Esto fuerza la exportacion de las clases
        private var m1:Modulo1;
        private var m2:Modulo2;
        
        // El Factory method
        public static function
crearModulo(tipo:String,contenido:String):IModulo{
                var instancia:IModulo = IModulo(new
_global[tipo](contenido));
                return instancia;               
        }
}

// Codigo Cliente
var m1:IModulo = ModulosFactory.crearModulo("Modulo1","¡Hola Mundo!");
var m2:IModulo = ModulosFactory.crearModulo("Modulo2","Foobar");
m1.mostrarContenido();
m2.mostrarContenido(); 

Un saludo,

Joseba Alonso
www.5dms.com
www.sidedev.net 

> -----Mensaje original-----
> De: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] En nombre de eemece2
> Enviado el: lunes, 27 de febrero de 2006 19:10
> Para: asnativos@5dms.com
> Asunto: Re: [ASNativos] Instanciar clases dinamicamente
> 
> Hola Joseba, y Hari. Gracias,
> 
> Con tu codigo, Joseba, no consiguo que funcione con 
> parametros (igual hago algo mal).
> Y lo del 'Factory Method Pattern' no lo conocia y me parece 
> muy interesante, y me vendra bien en otra parte del proyecto, 
> cuando me lo estudie bien. Pero para lo que quería ahora, me 
> da que no me vale, creo:
> 
> Lo que estoy haciendo ahora es un mini-framework que va a 
> leer de un XML la configuracion de un portal.
> 
> Ahora, en ese XML, pongo una definicion de 'paginas', dentro 
> de las cuales hay instancias de 'modulos'. Y al final tambien 
> estan las definiciones de las diferentes clases de modulos, 
> cada uno con un ID.
> 
> Ahora, a la hora de crear esos modulos, uso un switch con el 
> ID de tipo de modulo para instanciar la clase del modulo 
> correspondiente. Lo que ocurre que esto está implementado en 
> una clase 'mainPortalForm', la cual es generica del 
> framework, y de la cual cada portal debera derivar la suya 
> propia. Y cada portal puede tener modulos propios.
> 
> Por eso queria dejar de usar switch con el ID del tipo de 
> modulo, y usar una instanciación dinamica, a partir de 
> strings sacados del XML de configuracion del portal (de cada 
> clase de modulo). Y en esa instanciacion tengo que usar los 
> parametros del constructor de la clase modulo (que deriva de 
> una clase base 'modulo').
> 
> No se si me he explicado.
> El caso es que igual lo estoy planteando mal, y no es 
> necesario hacer una instanciación dinamica.
> O igual deberia hacer que todos los modulos que implemente 
> vayan 'hard-coded' en el 'mainPortalForm'. No lo tengo muy claro.
> 
> Esto va a correr por 'encima' de una aplicacion asp.net, que 
> es la que define el XML, y dentro de la cual se usa un 
> sistema mas o menos dinamico de creacion de modulos a partir 
> de ese XML (teniendo almacenado en el XML las cadenas de los 
> modulos, que son controles asp.net, por ejem:
> "Projects.asmx")
> 
> Perdon por la chapa, no pensaba liarme tanto :)
> 
> Gracias y un saludo,
> Edu-eemece2
> 

----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------

Reply via email to