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]

