有些类不需要有多个实例,只需要一个就行
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 {}