Actionscript设计模式–Singleton模式(单件模式)
[首发http://bluef.org/b/2008/10/actionscriptsingleton.html]
昨晚开始看Advance Actionscript 3 with design pattern,从今天开始写一些各个设计模式的学习笔记吧.
—————正文分割线—————
Singleton Pattern,意思就是在运行期只允许一个实例的模式.Singleton模式一般用于在运行期只需要一个实例的类,比如setting类,或者鼠标管理类,因为只有一个鼠标指针,只需要一个类来管理.
对于独立的个体程序员,也许只需要在程序中注意只创建一个实例并在之后的程序中调用此实例即可.但是如果是多人协作,那么其他人有可能误创建多个此类的实例.因此Singleton模式提供了一种安全的返回实例的办法.
首先是示例代码
package SingletonExample{
public class Singleton {
static private var _instance:Singleton;
public function Singleton(singletonEnforcer:SingletonEnforcer) {}
public static function getInstance():Singleton {
if(Singleton._instance == null){
Singleton._instance = new Singleton(new SingletonEnforcer());
}
return Singleton._instance;
}
public function doSth():void{
trace("do something");
}
}
class SingletonEnforcer {}
}
调用方法:
Singleton.getInstance().doSth();
可以看到,Singleton类使用一个静态变量存储一个Singleton类的实例,并且不允许此as文件外的类实例化SIngleton类.这是因为 as文件虽然可以包含多个类,但是文件外的类不能直接访问到与文件名不一致的类.因此SingletonEnforcer类是无法被其它类访问到的.而实 例化Singleton类又需要一个SingletonEnforcer类的实例作为变量.因此就达到了限制Singleton类实例化的目的.
Singleton 类使用静态方法getInstance来取得Singleton的实例.如代码所示,如果静态变量_instance未被初始化,那么就实例化一个 Singleton类并将其存储在_instance.由于是静态变量,因此_instance也可以持续的被访问到.
当然其他的方法的定义还是一样的,比如例子中的doSth().