royale flex actionscript

flex - apache royale



Singleton Class en Flex (5)

Lata de gusanos preguntando por singletons

Hay algunas opciones diferentes sobre la creación de 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{}

Tenga en cuenta que la clase SingletonEnforcer es interna, por lo que solo puede ser utilizada por la clase Blah (efectivamente). Nadie puede instanciar directamente la clase, tienen que pasar por la función getInstance ().

Tengo una duda, ... ¿Cómo crearías una clase de Singleton en Flex ...

¿Hay alguna convención como el nombre de clase debe eb Singleton o debería extender cualquier 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 mis textos de etiquetas de componentes en una clase de Singleton ... ¿Es un buen enfoque?



Espero no estar golpeando caballos muertos aquí :)

(Editar: Ahh, solo estoy repitiendo el enlace de phils)

La implementación singleton de Gregors no protege contra la invocación del constructor con un valor nulo, como en:

var b:Blah = new Blah(null);

Todavía tendrá solo 1 instancia, pero aún es posible invocar al constructor con las siguientes consecuencias.

Si debe aplicar obligatoriamente 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 por 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 plugin que cargue BBB.swf en el mismo dominio de aplicación que AAA.swf


package com.foo.bar { public class MySingleton { private static var _instance:MySingleton = new MySingleton; private var _myName:String; public static function get instance():MySingleton { return _instance; } public function set myName(value:String):void { _myName = value; } public function get myName():String { return _myName; } } }

Observe la ausencia de un constructor aquí.


Primero, puede hacer referencia a una pregunta anterior para averiguar cómo crear una clase singleton. Puede encontrar más información de una presentación de Yakov Fain también.

En la segunda pregunta, su proyecto puede tener la tecnología de clase singleton como mejor le parezca, pero solo creará 1 instancia de cada una. 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.

Finalmente, las soluciones de un mundo real serían. 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.

Usar singletons es un buen enfoque si necesita pasar datos alrededor de su aplicación de un componente a otro y desea desacoplarlos entre sí.