Chinaunix首页 | 论坛 | 博客
  • 博客访问: 220321
  • 博文数量: 68
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-19 21:17
文章分类

全部博文(68)

文章存档

2009年(16)

2008年(12)

2007年(27)

2006年(13)

我的朋友

分类: 系统运维

2008-05-04 15:56:37

ActionScript3.0学习笔记之单件模式
通常我们创建类,然后你new操作符来创建类的一个实例。当我们使用new操作符时,系统自动调用类的构造函数为我们创建了该类的一个实例。这好像是我们无法控制的。所以,如果我们要对创建实例的个数加以控制,首先,我们得禁用这个构造函数。
一、如何使new操作符失效呢?
最直接的想法是可以设置构造函数为私有,这样在类的外部就不能调用这个构造函数,new操作符当然就不能用了。但ActionScript 3.0并不支持私有构造函数。所以,在这里,要利用ActionScript3.0中两个小细节约束来实现这个功能。1)如果函数定义时没有指定默认参数,调用方法时必须显示指定所有参数。2)在一个类定义文件中,如果在package之外定义了一个类,那么它只能通过该文件内的主类来调用,文件之外的程序是无法调用它的,我们暂且把这种类叫作隐藏类。由以上两点,我们可以定义一个构造函数,它需要一个隐藏类来作为参数。这样不就让这个构造函数变成私有的吗?
关闭了构造函数这个创建实例的入口,我们要定义自己的创建实例的方法。但
二、如何控制类只被实例化一次?
如果一个属性是属于类的,而不是属于实例的,那我们就要使用静态(static)属性。(在ActionScript 3.0中,不能继承静态的属性和方法)我们可用一个私有静态属性来保存我们创建的这个实例的引用,然后用一个公有静态方法来返回这个实例的引用。并且在调用这个方法时,进行检测,只有这个实例不存在时才创建,否则就直接返回已有的实例引用。代码如下:
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(....);
   } 
   return MyClass._instance;
  }
 }
}
class SingletonEnforcer{}
阅读(570) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~