1.概述 单例模式是要保证内存中只有一个该类的对象。代码如下
- public class MyClass {
- public function MyClass() {}
- public static function getInstance():MyClass {
- return new MyClass();
- }
- }
As不允许将构造函数变成private 和protected,因此依然可以通过new来实例化对象。
var myObject:MyClass = new MyClass(); 为了避免被实例化,可以写成
public function MyClass(){
throw Error("error");
}
可是,对象依然可以实例化。
最佳写法为
- package {
-
- public class MyClass {
-
- private static var _instance:MyClass;
-
- public function MyClass(enforcer:SingletonEnforcer) {}
-
- public static function getInstance():MyClass {
- if(MyClass._instance == null) {
- MyClass._instance = new MyClass(new SingletonEnforcer());
- }
- return MyClass._instance;
- }
-
- }
- }
-
- class SingletonEnforcer {}
假如一个函数的参数没有默认值,在没有传递参数的情况下去调用这个函数,编译器就会报错。这是ActionScript 3.0的一个新特性,这个特性同样适用于构造函数。
ActionScript 3.0还有一个新特性,在一个类文件里可以不只写一个类。也就是说在一个 .as 文件里可以写多个类。与文件名相同的那个类叫主类,主类只能有一个,其它类可以是任意多个,而且其它类只对包内可见,不能被外部引用。
这种方式的
缺点:可以把 null 作为参数传递给构造函数来 new 出一个 MyClass 类实例。每一种语言都不可能是完美的,但以上做法在ActionScript 3.0里已经能基本解决问题了。
2.单例模式的使用举例 FLEX框架提供了一个内部类mx.core.Singleton ,用于框架的单例对象管理。
具体代码参见《
mx.core.Singleton源代码解析》。
参考文献1.如何在ActionScript 3.0里使用单例模式.
2.
Actionscript 3.0中Singleton实现.
3.例子程序.
阅读(3130) | 评论(0) | 转发(1) |