文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ActionScript3.0学习笔记之单件模式

ActionScript3.0学习笔记之单件模式

时间:2008-05-04  来源:stone5

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{}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载