2009-08-21 17 views
6

tengo una duda, .... ¿Cómo se crea una clase Singleton en Flex ...Singleton clase en Flex

¿Hay alguna convención como el nombre de la clase deben eb Singleton o se deben extender ninguna otra clase .

¿Cuántas clases de Singleton puede tener un proyecto?

¿Alguien puede decir el uso en tiempo real de una clase de Singleton?

Estoy planeando mantener los textos de mis etiquetas de componentes en una clase de Singleton ... Es un buen enfoque.

Respuesta

17

¿Hay lombrices que preguntan por singletons?

Existen algunas opciones diferentes para crear singletons principalmente debido a que AS3 no tiene constructores privados. Este es el patrón que usamos.

package com.foo.bar { 

    public class Blah { 

     private static var instance : Blah; 

     public function Blah(enforcer : SingletonEnforcer) {} 

     public static function getInstance() : Blah { 
      if (!instance) { 
       instance = new Blah(new SingletonEnforcer()); 
      } 
      return instance; 
     } 

     ... 
    } 
} 
class SingletonEnforcer{} 

Nota que la clase SingletonEnforcer es interna por lo que sólo puede ser utilizado por la clase Blah (efectivamente). Nadie puede instanciar directamente la clase, tienen que pasar por la función getInstance().

0

Primero puede hacer referencia a un question anterior para averiguar cómo crear una clase singleton. Puede encontrar más información en Yakov Fain presentation también.

En segundo lugar, su proyecto puede tener la clase de tecnología singleton que mejor le parezca, pero solo creará 1 instancia de cada uno. Por ejemplo, en la arquitectura de cairngorm tiene 3 singletons principales: controlador, servicio y modelo. El número de clase real puede depender mucho de tu proyecto.

Por último, las soluciones de un mundo real sería. Tienes 2 componentes que necesitan hablar entre ellos pero no quieres que sepan que el otro existe. Es decir, a veces los componentes están ahí y, a veces, no ... así que los necesitas para que estén ligeramente acoplados. puede usar singletons para pasar los datos de un componente al otro sin "hablar" directamente con ellos.

El uso de singletons es una buena opción si necesita pasar datos alrededor de su aplicación de un componente a otro y desea desacoplarlos entre sí.

+0

puedo llamar algo como esto .. \t <[CDATA [ \t \t com.invoicetracking.includes.MyValues ​​importación!; \t]]> \t Kevin

+0

Donde MyValues ​​es una clase Singleton y addUser es una variable. – Kevin

+0

seguro puede. solo asegúrate de agregar la metaetiqueta [Bindable] – Shua

2

esperanza no estoy golpeando caballos muertos aquí :)

(editar: Ahh, sólo estoy repitiendo phils enlace)

Gregors aplicación Singleton no protege contra invocando el constructor con un valor nulo, como en:

var b:Blah = new Blah(null); 

Usted sti Tendré solo 1 instancia, pero aún es posible invocar al constructor con las consecuencias que siguen.

Si absolutamente debe aplicar el singleton, el constructor debe asegurarse de que el parámetro enforcer no sea nulo.

public function Blah(enforcer : SingletonEnforcer) { 
     if(!enforcer){ 
     throw new Error("whoops!"); 
     } 
    } 

También debería preocuparse acerca de ApplicationDomain al cargar archivos swf.Los archivos SWF externos que usan las mismas definiciones pueden tener varias instancias únicas (1 en cada dominio de aplicación por separado) si no especifica que el archivo swf debe cargarse en el dominio de aplicación existente.

Esto significa que Blah.getInstance() en AAA.swf no es la misma instancia que Blah.getinstance() en BBB.swf, si AAA.swf carga BBB.swf sin una instancia de LoaderContext que le dice al complemento que cargue BBB.swf en el mismo dominio de aplicación como AAA.swf

+0

Desafortunadamente, tu sugerencia no funcionará si necesitas llamar al super() en el contructor porque tu singleton hereda de otra clase. – MadBlack

0

Observe la ausencia de un constructor aquí.