发新话题
打印

[研究] AS2 单例模式功能

AS2 单例模式功能

单例模式功能:
    单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

使用范围:
    全局只有一个功能出现.  例如ToolTip(提示文本)

下面是源代码:
新建sington.as文件,输入以下代码
class sington{
    private static var getinstan:sington;
    private var bgcolor;
    private function sington(){}
    public static function instan():sington{
        if(getinstan==undefined){
            getinstan=new sington();
        }
        return getinstan;
    }
    private function setbgcolor(_value:Number){
        bgcolor=_value.toString(16);
        return bgcolor;
    }
}
/*
在sington.as相同目录下新建.Fla文件.
在第一帧插入代码测试:
var t=sington.instan();
t.setbgcolor(0xff9933);
//注意:setbgcolor不是静态方法
var s=sington.instan();
trace(s.bgcolor);
//注意:bgcolor不是静态属性
trace(t==s);


无如你怎么调用它,都只是在复制(把新对象(var s)内存地址指向)第一次声明的对象(var t)
AS外包QQ: 254810452
http://www.an86.net/
http://www.feic8.cn/
月城少主穿越黑暗城市!

TOP

不过我提点小意见.思路不错.不过我觉得还是用静态类来达到单例效果比较好而且简单.你这样可能有点绕.还有代码我没测试,不过请教楼主t.setbgcolor(0xff9933)为什么能执行?setbgcolor(_value:Number)不是定义为 private吗

TOP

AS2 的 private不是真正的私有吧

TOP

测试过了

原来是AS2的BUG,用强类型化定义变量private才会发挥它的功能.
把楼主的var t=sington.instan()改为下面试下就明白了
var t:sington=sington.instan();

TOP

var t=sington.instan()
这样可以动态写入变量,如:t.bbs="anlei"; 等!

而 var t:sington=sington.instan();却不能!
AS外包QQ: 254810452
http://www.an86.net/
http://www.feic8.cn/
月城少主穿越黑暗城市!

TOP

发新话题