为什么AS3版本的Singleton中没有私有构造函数?

Tre*_*roy 4 apache-flex actionscript flex3 actionscript-3

我很困惑:在AS3中,为什么我们保留Singleton类构造函数public而不是private像Java一样?如果我们保留构造函数public,那么我们可以直接从外部访问它!

请查看此示例中的MODEL部分.

Sam*_*aan 8

Actionscript 3不支持私有构造函数.

为了强制执行单例模式,如果已经创建了单例实例,许多开发人员会使构造函数引发异常.这将导致运行时错误,而不是编译时错误,但它确实阻止了单例的不当使用.


例:

public static var instance:MySingleton;

public MySingleton(){
    if (instance != null) {
        throw new Error("MySingleton is a singleton. Use MySingleton.instance");
    }else {
        instance = this;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1表示构造函数的正确信息.另外,如果您正在使用MVC,请考虑RobotLegs(http://robotlegs.org/) - 它带有集成依赖注入(http://swiftsuspenders.org/),它将处理单例*和*MVC更容易. (3认同)

net*_*eet 5

这篇博文中,Sho Kuwamoto(以前是Macromedia/Adob​​e,并且大量参与Flex平台和工具的开发)解释了从ActionScript 3.0中省略私有和受保护构造函数的决定,可能会引起人们的兴趣.

Macromedia/Adob​​e参与开发ECMAScript 4标准,并决定使ActionScript 3.0尽可能地遵守规范,这意味着他们面临着选择避免这些功能,完全忽略语言或等待直到它们被标准化(并因此延迟了语言的发布).

我认为这很有意思,因为它揭示了公开与专有标准争论中的一些关键问题.