Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3351717
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: 系统运维

2012-10-26 17:36:36

1.概述
      单例模式是要保证内存中只有一个该类的对象。代码如下

点击(此处)折叠或打开

  1.     public class MyClass {
  2.             public function MyClass() {}
  3.             public static function getInstance():MyClass {
  4.                     return new MyClass();
  5.             }
  6.     }

      As不允许将构造函数变成private 和protected,因此依然可以通过new来实例化对象。
               var myObject:MyClass = new MyClass();


     为了避免被实例化,可以写成
              public function MyClass(){
                   throw Error("error");
              }
     可是,对象依然可以实例化。

     最佳写法为

点击(此处)折叠或打开

  1. package {
  2.      
  3.      public class MyClass {
  4.      
  5.             private static var _instance:MyClass;
  6.      
  7.             public function MyClass(enforcer:SingletonEnforcer) {}
  8.      
  9.             public static function getInstance():MyClass {
  10.                   if(MyClass._instance == null) {
  11.                             MyClass._instance = new MyClass(new SingletonEnforcer());
  12.                    }
  13.                    return MyClass._instance;
  14.              }
  15.      
  16.        }
  17. }
  18.      
  19. 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) |
给主人留下些什么吧!~~