0

我在http://www.devahead.com/blog/2010/03/beware-of-singleton-in-flex-modules/学习了「Beware of singleton in Flex modules」, 很多信息告诉我不同​​的模块内容不同,但在我的情况下它不起作用!为什么不同的模块使用相同的静态对象?我正在尝试使用模块范围的单例,但它像应用程序范围的单例一样工作。有人可以帮助我如何制作模块范围的单例。短代码如下:

    <s:Application>
    <s:ModuleLoader id="A" creationComplete="loadAModule()"/>    
    <s:ModuleLoader id="B" creationComplete="loadBModule()"/>    

    </s:Application>

    //-----------AModule
    <s:Module>
       var aITx:ITx=Tx.newInstant();//Tx extend ITX
       tracc(aITx.instantId);
       ...
    </s:Module>

    //-----------BModule
    <s:Module>
       var aITx:ITx=Tx.getInstance();//Tx extend ITX
       tracc(aITx.instanceID);
       ...
    </s:Module>


    //-----singleton class
        public class Tx extends EventDispatcher  implements ITx
        {
            public function Tx()
            {
                // Add listeners
                addEventListeners();
            } 
            private static var instance:Tx;
            public static function getInstance():Tx
            {
                if (!instance)
                {
                    instance = new Tx();
                    // Generate a random instance ID
                    instance._instanceID = Math.round(Math.random() * 100);
                    trace("create new itx id="+instance.instanceID);
                }else{
                    trace("use old itx id="+instance.instanceID);
                }

                return instance;
            }
            protected var _instanceID: Number = NaN;

            public function get instanceID(): Number
            {
                return _instanceID;
            }

        }
4

1 回答 1

0

我认为您的问题与加载模块的上下文有关。在您的情况下,我猜您的所有模块都加载到相同的上下文中。在一种情况下,一个类只有一个版本。因此,您的 Singleton 只有一个实例。如果你想拥有单独的类,你必须将每个模块加载到它自己的上下文中。看看这个链接,它很好地解释了上下文的东西:http: //livedocs.adobe.com/flex/3/html/help.html?content= 05_Display_Programming_33.html

于 2012-07-30T09:56:22.203 回答