最近在看《head first design pattern》,这本书大名鼎鼎不过是java写的,看到书中的单例模式其本质是:
构造函数私有,但是AS3不允许构造函数私有,当然通过别的手段也能模仿出来。
代码如下:
先创建一个Singleton对象并实例化,在构造函数中检查是否有Singleton对象被实例化,如果没有则抛出异常:
package
{
/**
* ...
* @author aisajiajiao
*/
public class Singleton
{
//提前将其实例化,如果是在java中添加synchronized关键字能够避免多线程引起的不同步现象
public static var singleton:Singleton = new Singleton();
public function Singleton()
{
if(singleton != null)
{
throw new Error("只能通过getInstance方法来实例化");
}
}
public static function getInstance():Singleton
{
trace("单例模式");
return singleton;
}
}
}
测试代码如下:
package
{
import flash.display.Sprite;
/**
* ...
* @author aisajiajiao
*/
public class Main extends Sprite
{
public function Main():void
{
//如果不注释掉下一句就会报错[Fault] exception, information=Error: 只能通过getInstance方法来实例化
//var singleton:Singleton = new Singleton();
var singleton2:Singleton = Singleton.getInstance();
}
}
}