有些类不需要有多个实例,只需要一个就行
1.
package
{
public class Sington
{
private static var isClosing:Boolean = false;
private static var linkSington:Sington;
public function Sington()
{
if(isClosing)
{
//不实例化
}
else
{
throw new Error("不能实例化");
}
}
public static function LinkSington():Sington
{
if(!linkSington)
{
isClosing = true;
linkSington = new Sington();
isClosing = false;
}
return linkSington;
}
}
}
//这样写有一个弊端,就是 isClose=true的同时另外一个地方实例化了这个类!
下面是测试
var cs2:Sington = Sington.LinkSington(); var cs3:Sington = Sington.LinkSington(); trace(cs2 === cs3);//输出为true
2.用包外类实现
package {
public class Sington
{
private static var linkSington:Sington;
public function Sington(singletoner:Singletoner)
{
if (singletoner == null)
{
throw new Error("不能实例化");
}
}
public static function LinkSington():Sington
{
if (linkSington == null)
{
linkSington = new Sington(new Singletoner());
}
return linkSington;
}
}
}
internal class Singletoner {}