快速业务通道

Actionscript3单例模式对象的释放控制

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-07

单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。通常定义一个单例类,使用类的私有静态变量指向类的唯一实例,并用一个公有静态方法获取该实例。如下面的类定义: package com.moorwind
{
public final class Singleton
{
//Other members. private static var _instance:Singleton;
public function Singleton(enforcer:SingletonEnforcer)
{
if(!enforcer)throw new Error("Singleton Error");
}
public static function getInstance():Singleton
{
if(!_instance)_instance = new Singleton(new SingletonEnforcer());
return _instance;
}

}
}
class SingletonEnforcer{} 单例类Singleton有以下特征:
1.它有一个指唯一实例的静态指针_instance,并且是私有的。
2.它有一个公有的函数,可以获取这个唯一的实例,并在需要的时候创建该实例。
3.它的构造函数使用了包内类的,这样就不能从别处创建该类的实例。 大多时候,这样的实现都不会出现问题。但是_instance指向的空间什么时候释放呢?更严重的问题是,这个实例的析构操作什么时候执行?如果在类的析构 行为中有必须的操作,比如关闭文件,释放外部资源,那么上面所示的代码无法实现这个要求。我们需要一种方法,正常地删除该实例。
C++中的析构函数可以帮助C++完美的实现这个功能,苏林的文章就写到了实现方法。Actionscript3只好采用一种很不优雅的方式,手工析构这个实例。 package com.moorwind
{
public final class Singleton
{
private static var _instance:Singleton;
public function Singleton(enforcer:SingletonEnforcer)
{
if(!enforcer)throw new Error("Singleton Error");
}
public static function getInstance():Singleton
{
if(!_instance)_instance = new Singleton(new SingletonEnforcer());
return _instance;
}

public static function destroy():void
{
_instance = null;
} }
}
class SingletonEnforcer{} //-----------------------------------------------------test:
package {
import com.moorwind.Singleton;

import Flash.display.Sprite;
import flash.utils.clearTimeout;
import flash.utils.setTimeout; public class SingleTest extends Sprite
{
private var instance:Singleton;
private var id:int;
public function SingleTest()
{
runTest();
id = setTimeout(testDestroy, 2000);
}

private function runTest():void
{
instance = Singleton.getInstance();
}

private function testDestroy():void
{
trace("destroy");
instance = null;
Singleton.destroy();
clearTimeout(id);
}
}
} 问题是,都要手工析构了,还创建单例干嘛...设计模式的滥用。 关键词:对象

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号