2010-09-08 53 views
0

考慮這種情況下,我們有一個A類這是單身它有一個功能總和(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

當你實例化一個單例時,你不使用「new」,否則它不會是一個Singleton,你會繼續創建A類的實例。爲了讓你的班級成爲單身人士,只有一個實例可以通過這種方式創建,當你在其他班級呼叫A時,你正在調用同一個實例A.

通常你使用getInstance方法,如果不存在或返回A.

先前創建的實例的單例類的實例看一看本作的更多信息: http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html

人們普遍接受的是,辛格爾頓應該儘量避免。你應該在這裏找到幾個帖子解釋了爲什麼,這裏有一個例子:

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

這應該做到這一點:)感謝幫幫我。 – 2010-09-08 10:23:28