方法一:(显式允许new一次)
package
{
import flash.errors.IllegalOperationError;
import flash.events.EventDispatcher;
import flash.utils.Dictionary;
import flash.utils.getQualifiedClassName;
public class DT1 extends EventDispatcher
{
private static var dict:Dictionary = new Dictionary();
public function DT1()
{
trace("运行DT1 ");
var ref:Class = this["constructor"] as Class;
if (dict[ref])
{
throw new IllegalOperationError((getQualifiedClassName(this) + " 只允许实例化一次!"));
}
else
{
dict[ref] = this;
}
}
/**
* 获取单例类,若不存在则创建
*
* @param ref继承自DT1的类
* @return
*
*/
public static function getInstanceOrCreate(ref:Class):*
{
if (dict[ref] == null)
{
dict[ref] = new ref();
}
return dict[ref];
}
}
}
方法二:(显式允许new一次)
package
{
import flash.errors.IllegalOperationError;
import flash.utils.getQualifiedClassName;
public class DT2
{
private static var _instance:DT2 = null;
public function DT2()
{
trace("运行DT2 ");
if(_instance)
throw new IllegalOperationError(getQualifiedClassName(this)+" 只运行实例化一次!");
}
public static function getInstance():DT2
{
return _instance ||= new DT2();
}
}
}
方法三:(隐式允许new一次 利用包外类看上去好像一次new都不行)
package
{
import flash.errors.IllegalOperationError;
import flash.utils.getQualifiedClassName;
public class DT3
{
private static var _instance:DT3 = null;
public function DT3(instance:SureSingle=null)
{
if(instance==null)
throw new IllegalOperationError(getQualifiedClassName(this)+" 是单例!");
}
public static function getInstance():DT3
{
return _instance ||= new DT3(new SureSingle());
}
}
}
internal class SureSingle{}
浙公网安备 33010602011771号