For what it's worth, that doesn't pollute the global namespace, Josh.
Things within a file outside of the package declared in that file are
private to the class (hence, others can't instantiate your Singleton
unless they pass it null). Kind of odd behavior in ActionScript, but
meh...

But you're right: opinions on Singletons in general are mixed at best.
Check out, say,
http://steve.yegge.googlepages.com/singleton-considered-stupid

-- 
Maciek Sakrejda
Truviso, Inc.
http://www.truviso.com

-----Original Message-----
From: Josh McDonald <[EMAIL PROTECTED]>
Reply-To: [email protected]
To: [email protected]
Subject: Re: [flexcoders] Re: Anyone have a good resource on singletons?
Date: Thu, 17 Jul 2008 08:44:50 +1000

Make that *public* static function init (root : DisplayObject)

http://nondocs.blogspot.com/2007/04/metadatamixin.html

-Josh

On Thu, Jul 17, 2008 at 8:44 AM, Josh McDonald <[EMAIL PROTECTED]>
wrote:
        **Rant (and code) follows**
        
        Ew, I hate that pattern. Well I'm not fond of client-aware
        singleton-dom either, but ew. What the hell does that "outside
        the package" definition do? Add a package-protected class to the
        default package? Add stuff to Global? Disappear it into fat air?
        What about name conflicts?
        
        If you're stuck with non-injection, try to use an interface and
        put "getInstance" into a public  static helper / locator
        function in a public "Locator" class, that instantiates a
        package-protected class with public methods. 
        
        Since we can't hide the constructor, all "enforce singleton"
        patterns are going to be ugly in AS3. I know two files are a
        pain, but try and keep the voodoo inside your package and out of
        the global namespace :)
        
        If you want "new SingletonClass()" to fail at compile-time like
        the above example, create a proper class with a custom namespace
        to do the enforcing instead of the throwaway default package
        class. Call it "DONTUSEME::ThisIsASingleton" if you wanna make
        things clear :) You can also enforce it at runtime if you like,
        using something like the below code.
        
        Oh, and make it "function get instance()" instead of "function
        getInstance()", this is ActionScript.
        
        If you're stuck doing a one-file singleton because you're too
        used to Java *ducks*, do it something like this:
        
        [Mixin]
        public final class SingletonClass {
        
          static private var __enforceSingletonKey : Number;
          static private var __instance : SingletonClass;
        
          static function init (root : DisplayObject) : void
          {
            //It's just safer to do it here than on the static
        declaration above. And you'll dodge some compiler bugs that
        misreport errors :)
            __enforceSingletonKey = Math.random();
          }
        
          function SingletonClass(key : Number)
          {
            if (key != __enforceSingletonKey) throw new Error("Don't
        instantiate me bro!");
          }
        
          public static function get instance() : SingletonClass
          {
            if (!__instance)
              __instance = new SingletonClass(__enforceSingletonKey);
        
            return instance;
          }
        }
        
        -Josh
        
        
        
        On Thu, Jul 17, 2008 at 4:55 AM, dbronk <[EMAIL PROTECTED]>
        wrote:
                Here is my preferred way of creating a singleton class.
                 Usage would
                be: MySingleton.instance.someVar
                
                
                Dale
                
                
--------------------------------------------------------------------
                
                package your.package
                {
                
                [Bindable]
                final public class MySingleton
                {
                public static const instance : MySingleton= new
                MySingleton(SingletonLock);
                
                public var someVar : String = "Hello";
                
                public function MySingleton(lockClass:Class)
                {
                if ( lockClass != SingletonLock || instance != null )
                {
                throw new Error("Invalid instantiation.  Please use
                instance.");
                }
                }
                
                }
                }
                
                class SingletonLock {}
                
                
--------------------------------------------------------------------
                
                
                
                
                
                --- In [email protected], "Tracy Spratt"
                <[EMAIL PROTECTED]> wrote:
                >
                > A singleton class will have a static getInstance()
                method.
                >
                >
                >
                > Anywhere you need to access members of the singleton,
                call that method.
                > Just import the class, do not use the normal
                instantiation procedures,
                > like new, or using an mxml tag.
                >
                > import mypackage.MyModel;
                >
                > [Bindable]private var _myModel:MyModel; //optional var
                reference
                >
                >
                >
                > Private function init(): void
                >
                >   _myModel = MyModel.getInstance();
                >
                >   Alert.show(_myModel.myFunction())
                >
                >
                >
                > <mx:Text ...text="{_myModel.myBindablePublicProperty}"
                >
                >
                >
                > Tracy
                >
                >
                >
                > ________________________________
                >
                > From: [email protected]
                [mailto:[EMAIL PROTECTED] On
                > Behalf Of Scott
                > Sent: Wednesday, July 16, 2008 12:42 PM
                > To: [email protected]
                > Subject: [flexcoders] Anyone have a good resource on
                singletons?
                >
                >
                >
                > I'm trying to find information on using singletons in
                AS3/Flex.  I've
                > got an .AS file set up but I'm having issues calling
                the data/functions
                > within that function in other classes.  Does anyone
                have a good resource
                > on the web for creating and using singletons?
                >
                >
                >
                > Thanks!
                >
                
                
                
                ------------------------------------
                
                --
                Flexcoders Mailing List
                FAQ:
                http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
                
                Search Archives: http://www.mail-archive.com/flexcoders%
                40yahoogroups.comYahoo! Groups Links
                
                
                
                
        
        
        
        
        -- 
        "Therefore, send not to know For whom the bell tolls. It tolls
        for thee."
        
        :: Josh 'G-Funk' McDonald
        :: 0437 221 380 :: [EMAIL PROTECTED]



-- 
"Therefore, send not to know For whom the bell tolls. It tolls for
thee."

:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: [EMAIL PROTECTED]
 


Reply via email to