Sabloane de proiectare in actionscript - Singleton Pattern

Modelul Singleton este o clasa cu o singura instanta si vine ca o alternativa la definirea unor obiecte globale. Clasa Singleton ofera un acces facil al intregii aplicatii la obiectele din interiorul acestei clase.

Clasa Sigleton creeaza o instanta a sa folosind o metoda statica getInstance(), instanta creeata fiind memorata ca atribut privat static al clasei singleton. Pentru evitare instantierii clasei din constructor acesta se declara privat(in actionscript nu se poate declara constructorul private sau protected).

O Clasa Singleton trebuie sa contina: o metoda de instantiere, getInstance() si un atribut in care este pastrata instanta clasei.

package
{
	public class Singleton 
	{
		private static var instance:Singleton;
		
		public function Singleton()
		{
			
		}
		
		/**
		 * getInstance function
		 * Intoarce o referinta a clasei Singleton
		 *
		 * @use:
		 * <code>
		 * Singleton.getInstance();
		 * </code>
		 */
		public static function getInstance():Singleton
		{
			if(instance == null)
			{
				instance = new Singleton();
			}
			return instance;
		}
	}
}

Dupa cum poate observati in exemplul de mai sus, in constructor nu a facut nici o verificare pentru a evita apelarea acesteia.
O metoda ar putea fi la definirea atributului instance sa se creeze si instanta clasei, verificarea putandu-se face astfel:

private static var instance:Singleton = new Singleton();

public function Singleton()
{
	if(instance != null)
	{
		throw new Error("ERROR: Se apeleaza folosind Singleton.getInstance();"); 
	}
}

La final clasa de tip Singleton va arata:

package
{
	public class Singleton
	{
		private static var instance:Singleton = new Singleton();
		
		public function Singleton()
		{
			if(instance != null)
			{
				throw new Error("ERROR: Se apeleaza folosind Singleton.getInstance();"); 
			}
		}
		
		/**
		 * getInstance function
		 * Intoarce o referinta a clasei Singleton
		 *
		 * @use:
		 * <code>
		 * Singleton.getInstance();
		 * </code>
		 */
		public static function getInstance():Singleton
		{
			instance = new Singleton();
			return instance;
		}
	}
}