Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14909
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-29 09:48
文章分类
文章存档

2013年(17)

我的朋友

分类: 系统运维

2013-01-29 09:54:47

原文地址:As语言的单例模式 作者:sinkingboat

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.例子程序.
阅读(161) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:简化的Flex4结构图

给主人留下些什么吧!~~