由于 AS3 不允许私有构造函数,因此构造单例并保证构造函数不是通过“new”显式创建的唯一方法是传递单个参数并检查它。
我听说过两个建议,一个是检查调用者并确保它是静态 getInstance(),另一个是在同一包命名空间中拥有一个私有/内部类。
传递给构造函数的私有对象似乎更可取,但看起来不能在同一个包中拥有私有类。这是真的?更重要的是,这是实现单例的最佳方式吗?
对enobrev的答案稍作修改,就是将实例作为吸气剂。有人会说这更优雅。另外,如果您在调用 getInstance 之前调用构造函数,enobrev 的答案将不会强制执行单例。这可能并不完美,但我已经测试过了并且它有效。 (《Advanced ActionScrpt3 with Design Patterns》一书中肯定还有另一种好方法可以做到这一点)。
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{}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)