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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Actionscript3单例模式对象的释放控制的所有评论