I have seen so many implementations of singletons around, and i just want a singleton that
1.- instances on the first call 2.- instances only once (duh)
So in performance and lowest memory consumtion, whats the best implementation for this?
Example 1
package Singletons
{
    public class someClass
    {
        private static var _instance:someClass;
        public function AlertIcons(e:Blocker):void{}
        public static function get instance():someClass{
            test!=null || (test=new someClass(new Blocker()));
            return _instance;
        }
    }
}
class Blocker{}
Example2
public final class Singleton
{
    private static var _instance:Singleton = new Singleton();
    public function Singleton()
    {
        if (_instance != null)
        {
            throw new Error("Singleton can only be accessed through Singleton.instance");
        }
    }
    public static function get instance():Singleton
    {
        return _instance;
    }
}
Example 3
package {
    public class SingletonDemo {
        private static var instance:SingletonDemo;
        private static var allowInstantiation:Boolean;
        public static function getInstance():SingletonDemo {
            if (instance == null) {
                allowInstantiation = true;
                instance = new SingletonDemo();
                allowInstantiation = false;
            }
            return instance;
        }
        public function SingletonDemo():void {
            if (!allowInstantiation) {
                 throw new Error("Error: Instantiation failed: Use SingletonDemo.getInstance() instead of new.");
            }
        }
    }
}
                example 2 but with a twist since you should allow new Singleton() to be called at least once and I don't like instantiating things until I need them, thus the first call to instance() actually creates the instance... subsequent calls grab the original.
EDIT: Sowed how it can also allow for if you call
var singleton:Singleton = new Singleton();
it will work... but all future tries will throw the error and force use of the getInstance() method
public final class Singleton{
    private static var _instance:Singleton;
    public function Singleton(){
        if(_instance){
            throw new Error("Singleton... use getInstance()");
        } 
        _instance = this;
    }
    public static function getInstance():Singleton{
        if(!_instance){
            new Singleton();
        } 
        return _instance;
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With