用正确的倾听者捕捉正确的事件?

时间:2010-09-08 08:55:52

标签: actionscript-3 oop

考虑这种情况,我们有一个 A类,它是单身,它有一个函数 Sum(a,b)**。现在我们分别有两个类** B类 C类。两个类(B,C)都调用add函数并监听事件。

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);
     }
}

同样有一个C和D类。现在,当我们说两个类都调用A的add函数时(当A是单例时),如何确保将正确的答案返回给正确的监听器。

其次,如果调用正在改变某些内容,那么单例中是否存在锁定?

1 个答案:

答案 0 :(得分:1)

当您实例化Singleton时,不使用“new”,否则它不会是Singleton,您将继续创建A类的实例。为了使您的类成为Singleton,只能创建一个实例,这样,当您在其他类中调用A时,您将调用相同的A实例。

通常使用getInstance方法,该方法返回Singleton类的实例(如果不存在)或返回先前创建的A实例。

请查看此信息以获取更多信息: http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html

人们普遍认为应尽可能避免使用Singleton。你应该在这里找到一些解释原因的帖子,这里有一个例子:

What is so bad about singletons?

在您的示例中,您可以执行此操作:

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);
     }
}