Actionscript 3.0中Singleton实现 修正篇

所属分类: 网页制作 / Flash 阅读数: 1632
收藏 0 赞 0 分享
在前面的blog中,代码如下:
复制代码 代码如下:

package Src
{
/**
* Written by Leezhm, 10th February, 2009
* Contact : Leezhm@126.com
*
* An example of singleton class
**/
public class CSingleton
{
// variable
private static var _instance = new CSingleton();
protected function CSingleton()
{
}
public static function getInstance():CSingleton
{
if (undefined != CSingleton._instance)
{
return CSingleton._instance;
}
else
{
throw Error("Could not create the instace!");
}
}
}
}

Rebuild会出现1153:A constructor can only be declared public.错误,错误原因在错误描述语句描述的很清楚,也就是Constructor在Actionscript中只能声明为public。而我当时写的时候,犯了习惯性的错误,因为我学习的C++和C#中写singleton pattern总是将constructor声明为protected或者private,所以也就"理所当然"地这样写了(还是应该好好重视每种编程语言的基础,虽然都是标准的OO语言,但应该还是各有自己的特色的,不然也就没吸引力了)。既然这样,我们就无法保证用户不用new来创建singleton class对象了,在我思考中,同QQ群上一位网友讨论了哈,他给我推荐了一种解决方案,如下:
复制代码 代码如下:

Public function CSingleton()
{
Throw Error("error!");
}

但后来通过自己的测试,发现这样是不行的,Actionscript的异常机制貌似跟C#和C++不同,其实还是创建了对象,即使抛出了Exception(当然我没有很深入的测试,也许结果并不正确,但这里我要推荐另一种在Actionscript中实现singleton pattern的方法)。后来自己在网上找到一本好书《Advanced Actionscript 3 with Design Pattern》,在它的Part III中的Chapter 4中找到了关于Actionscript中singleton的讨论。

由于我们没法把constructor声明为private,那就可以给constructor传递一个private的variable,同样可以达到不能new的目的。但是怎么样才能让一个只对singleton class有private作用域的variable呢,我们要注意Actionscript的一些规则,比如在一个AS文件中只能有一个Package,一个和AS文件同名的Main Class。但我们在AS文件的包外声明一个class,而且这样声明的class只对package中的class有作用域,对包外是不可见的。所以可以如下来写这个Singleton class:
复制代码 代码如下:

package Src
{

/**
* Written by Leezhm, 14th February, 2009
* Contact : Leezhm@126.com
*
* An example of singleton class
**/

public class CSingleton
{
// variable
private static var _instance = new CSingleton(new SingletonEnforcer());

public function CSingleton(enforcer:SingletonEnforcer)
{
}

public static function getInstance():CSingleton
{
if (undefined != CSingleton._instance)
{
return CSingleton._instance;
}
else
{
throw Error("Could not create the instace!");
}
}

}
}

class SingletonEnforcer {}

BTW: 顺便附上一张电子书中关于Actionscript 3中Singleton Pattern Class讲解的照片,如下:
Actionscript 3 Singleton Pattern Class
更多精彩内容其他人还在看

AS3 中的package(包)应用实例代码

初学者在学习AS3时会遇到什么样的问题呢?只有从初学的角度来实践,才能知道,package 这个高手们必玩的内容,对初学者来说或许就有一些困惑。
收藏 0 赞 0 分享

swfupload使用代码说明

终于在天哪joyous的帮助下,花了一天的时间,搞明白大部分内容. swfupload(以下简称su)遇到的主要问题就是,版本不同造成的极大差异, 现在的版本已经到2.1beta。我用的是2.02版,天哪用的是1.xx版。
收藏 0 赞 0 分享

Flex中最好的MVC框架Mate框架

个人感觉Mate框架非常适合开发一般运用程序,可以提高开发效率,节约成本,同时也比较好维护。但如果要做游戏或是其它控制更强的程序并不适合。
收藏 0 赞 0 分享

Flex 创建复数行文本内容的List

效果不错的flex多行文本
收藏 0 赞 0 分享

flash/flex/air的一个大问题

Close Advertisement 对HTML标签的支持得不够好。现在普遍的做法是浮一个iframe。
收藏 0 赞 0 分享

flex编程动态生成图像

程序需求:动态生成柱形图,柱形条数不确定,柱形字段不确定
收藏 0 赞 0 分享

帮助你学习 Flash / ActionScript的12个网站

Adobe Flash是一个很好的技术,该技术允许开发人员加入的互动性和平稳的动画网页。 其受欢迎程度是如此巨大,您可以看到许多网站,致力于帮助开发者有兴趣在闪光。
收藏 0 赞 0 分享

入门简单的FLEX验证码一例

入门简单的FLEX验证码一例
收藏 0 赞 0 分享

ActionScript3禁止构造请求标头Referer

ActionScript3禁止构造请求标头Referer
收藏 0 赞 0 分享

做了一个flash视频墙[附源文件与xml文件]

这篇文章主要介绍了做了一个flash视频墙[附源文件与xml文件]
收藏 0 赞 0 分享
查看更多