Joseba dijo:
>Joder, no se si me he explicado..., si quieres te pongo un ejemplo.

Te has explicado perfectamente, ahora a ver si me aclaro yo :)

Joseba dijo:
>Si tienes una clase generica que usa el factory le pasas el Concrete pero
>esta lo tipa internamente como el Abstracto...
...
>Asi el resto las clases de bajo nivel hacen referencia al tipo abstracto,
>pero en las de alto nivel, las que son diferentes para cada portal,
>instancian el concreto y lo pasan.

Entonces me temo que siempre que tengo un 'Cliente' (Clase de bajo nivel,
generica), le tengo que pasar el factory como parametro...

Si tengo la siguiente rama de instancias, composicion, o como se diga:

Aplicacion - MainForm - Module - Lista - ItemLista

Puedo instanciar en Aplicacion el ConcreteFactory y pasarlo como tipado
AbstractFactory a MainForm, y este lo pasara a module, y asi hasta
ItemLista.

Tendria que hacer algo del tipo:

    var factory:AbstractFactory = new ConcreteFactory();
    factory.createButton(factory, ...)

o en la implementacion de factory.createButton() pasar al constructor de la
clase Button, o su derivada, el propio factory como parametro:

function createButton(para,me,tros):Button {
       // this es el factory concreto
       return( new menganitoButton(this, para,me,tros));
}

Por tanto deberia cambiar 'todas' las clases para que acepten un primer
parametro que sea el Factory tipado como AbstractFactory.
¿Es mala idea usar un singleton ya existente (Aplicacion), para almacenar la
instancia del Factory y usar una funcin miembro para obtenerlo?

Me tiene un poco liado una cosa:
¿El Factory no es global?
A mi me gustaria tener algo de flexibilidad a la hora de que pueda haber
'Clientes' en la misma aplicacion que usen en sitios diferentes diferentes
Factorys, por ejemplo, que un Button pueda en un Modulo instanciarse con una
clase y en otro modulo con otra clase (mediante los Factorys adecuados),
pero no me aclaro en cuadrarlo con el concepto de AbstractFactory. Porque no
podria pasar un factory concreto a los modulos, pues estos son instanciados
por un nivel superior (mainForm), abstracto en este caso.
El ejemplo habitual que ponen es cambiar globalmente todo (ejemplo Motif vs.
PM).
La alternativa que veo es crear nuevas clases derivadas, y añadirlas a los
Factorys, pero sale el problema de la poca escalabilidad de añadir clases a
los factorys (este no se si es un problema con una solucion factible).

Son todo lios mentales, eh!, por si digo alguna gilipollez! :D

Saludos,
Edu-eemece2

----------------------------------
Lista ASNativos:[email protected]
http://www.5dms.com/listas
----------------------------------

Responder a