当前位置:  开发笔记 > 编程语言 > 正文

在Actionscript 3中实现单例模式类的最佳方法是什么?

如何解决《在Actionscript3中实现单例模式类的最佳方法是什么?》经验,为你挑选了2个好方法。

由于AS3不允许私有构造函数,因此构造单例并保证构造函数未通过"new"显式创建的唯一方法是传递单个参数并进行检查.

我听过两个建议,一个是检查调用者并确保它是静态getInstance(),另一个是在同一个包名称空间中有一个私有/内部类.

在构造函数上传递的私有对象似乎更可取,但看起来你不能在同一个包中拥有私有类.这是真的?更重要的是它是实现单身人士的最佳方式吗?



1> Iain..:

enobrev答案的略微改编就是将实例作为吸气剂.有人会说这更优雅.此外,如果在调用getInstance之前调用构造函数,enobrev的答案将不会强制执行Singleton.这可能不完美,但我已经测试了这个并且它有效.(在"带有设计模式的高级ActionScrpt3"一书中,还有另一种很好的方法可以做到这一点).

package {
    public class Singleton {

    private static var _instance:Singleton;

    public function Singleton(enforcer:SingletonEnforcer) {
        if( !enforcer) 
        {
                throw new Error( "Singleton and can only be accessed through Singleton.getInstance()" ); 
        }
    }

    public static function get instance():Singleton
    {
        if(!Singleton._instance)
        {
            Singleton._instance = new Singleton(new SingletonEnforcer());
        }

        return Singleton._instance;
    }
}

}
class SingletonEnforcer{}



2> enobrev..:

我已经使用了一段时间,我相信我原来是从所有地方的维基百科.

package {
    public final class Singleton {
        private static var instance:Singleton = new Singleton();

        public function Singleton() {
            if( Singleton.instance ) {
                throw new Error( "Singleton and can only be accessed through Singleton.getInstance()" ); 
            }
        }

        public static function getInstance():Singleton {                
            return Singleton.instance;
        }
    }
}

以下是该问题的有趣总结,这导致了类似的解决方案.


投票,因为这是正确的,不像其他答案.您还可以将"instance"作为getter,这对于FlashDevelop中的代码自动完成更好.
这很好,但缺点是在运行时而不是编译时检查.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有