Since AS3 does not allow private constructors, it seems the only way to construct a singleton and guarantee the constructor isn’t explicitly created via ‘new’ is to pass a single parameter and check it.
I’ve heard two recommendations, one is to check the caller and ensure it’s the static getInstance(), and the other is to have a private/internal class in the same package namespace.
The private object passed on the constructor seems preferable but it does not look like you can have a private class in the same package. Is this true? And more importantly is it the best way to implement a singleton?
A slight adaptation of enobrev’s answer is to have instance as a getter. Some would say this is more elegant. Also, enobrev’s answer won’t enforce a Singleton if you call the constructor before calling getInstance. This may not be perfect, but I have tested this and it works. (There is definitely another good way to do this in the book ‘Advanced ActionScrpt3 with Design Patterns’ too).