今天看到了 N神AS研究所的文章【AS3与设计模式】 Singleton Pattern (单例模式)http://www.nshen.net/blog/article.asp?id=511;
感觉非常有用,使用了一下,主要在存数据的上面还有些不明白,通过研究,自己找到了一中方法.
改写了其中 singleton 类:
_____________start_______________
package singleton
{
public class Singleton
{
private static var _instance:Singleton;
private var singletonInstance:SingletonEnforcer;
public function Singleton(singletonEnforcer:SingletonEnforcer) {
if(singletonEnforcer==null){
throw new Error("singletonEnforcer");
} else {
singletonInstance = singletonEnforcer;
}
}
public static function getInstance():Singleton {
if(Singleton._instance == null) {
Singleton._instance = new Singleton(new SingletonEnforcer());
}
return Singleton._instance;
}
public function doSomething():void {
trace(singletonInstance.gogo());
trace("SOMETHING!");
}
}
}
class SingletonEnforcer {
private var holy:int = 1;
public function gogo():int{
holy++;
return holy;
}
}
__________________end_____________
其中 Designpatterns类不变:
_____________start_______________
package {
import flash.display.Sprite;
import Singleton;
public class Designpatterns extends Sprite
{
public function Designpatterns()
{
Test_Singleton()
}
public function Test_Singleton():void{
var s:Singleton=Singleton.getInstance()
s.doSomething();
/*
使用构造函数创建实例会报错
var s1:Singleton=new Singleton()
s1.doSomething()
*/
}
}
}
__________________end_____________
这是个人想法,不知道其他应用者是怎么实现的..
转自:http://hi.baidu.com/moubang/blog/item/d6e64d2ad14aec98023bf62b.html
********author:ycccc8202**********3.0的单例模式*************/
package {
import flash.display.Sprite;
public class SingletonExample extends Sprite
{
public function SingletonExample()
{
var single1:Singleton=Singleton.getInstance()
var single2:Singleton=Singleton.getInstance()
trace(single1==single2)
try{
var single:Singleton=new Singleton()}
catch(e:Error){
trace(e)}
}
}
}
class Singleton
{
private static var __INSTANCE:Singleton
private static var __ALLOW:Boolean=false
public function Singleton(){
if(__ALLOW==false){
throw new Error("不能通过new创建实例!");
}
return;
}
public static function getInstance():Singleton{
if(__INSTANCE==null){
__ALLOW=true
__INSTANCE=new Singleton()
__ALLOW=false
}
return __INSTANCE
}
}
/**************************************************/
/****AS3主要是由于构造函数必须为public,所以用throw进行了设置****/