2010-09-08 3 views
0

Considérez ce scénario, nous avons une classe A qui est singleton, il a une fonction Somme (a, b) **. Maintenant, nous avons deux classes ** Classe B et Classe C respectivement. Les deux classes (B, C) appellent la fonction d'ajout et écoutent un événement.Attraper le bon événement avec le bon auditeur?

Class A 
{ 
    function add(a:int,b:int):void 
    { 
     c:int = a+b; 
     dispatchEvent(new myEvent(myEvent.addComplete,c)); 
    } 

} 

Class B 
{ 
    function addSomething():void 
    { 
      var objectA:A = new A(); 
      objectA.addEventListener(myEvent,onAddComplete); 
      var a:int = 10; 
      var b:int = 20; 
      objectA.add(a,b); 
    } 

    function onAddComplete(e:myEvent):void 
    { 
       trace(e.something); 
    } 
} 

De même, il existe une classe C et D. Maintenant, quand on dit que les deux classes appellent la fonction add de A (quand A est singleton), comment s'assurer que la bonne réponse est retournée à l'écouteur de droite.

En second lieu si les appels sont en train de changer quelque chose, est-il un verrouillage singleton?

Répondre

1

Lorsque vous instanciez un Singleton, vous n'utilisez pas « nouveau », sinon il ne serait pas un Singleton, vous continuer à créer des instances de la classe. Pour que votre classe soit Singleton, une seule instance peut être créée, de cette façon, lorsque vous appelez A dans d'autres classes, vous appelez la même instance de A.

Généralement, vous utilisez la méthode getInstance qui retourne soit une instance de la classe Singleton si aucune existe ou retourner l'instance de A.

précédemment créé Jetez un oeil à ce pour plus d'informations: http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html

Il est généralement admis que Singleton devrait être évité si possible. Vous devriez trouver quelques messages expliquant ici pourquoi, voici un exemple:

What is so bad about singletons?

Dans votre exemple, vous pouvez le faire par exemple:

 
class A 
{ 
    function add(params:Object , dispatcher:EventDispatcher) 
    { 
     c = params.a + params.b; 
     dispatcher.dispatchEvent(new MyEvent(c)); 
    } 
} 

class B 
{ 
    private var _dispatcher:EventDispatcher = new EventDispatcher(); 

    function addSomething():void 
    { 
      var objectA:A = new A(); 
      _dispatcher.addEventListener(MyEvent.ADD,onAddComplete); 
      var params:Object = {a:10 , b:20}; 
      objectA.add(params , _dispatcher); 
    } 

    function onAddComplete(e:MyEvent):void 
    { 
       trace(e.something); 
    } 
} 
+0

Cela devrait le faire :) Merci pour la Aidez-moi. –