有没有办法像模板单例类一样制作,这样当你扩展它时,扩展类也是一个单例类,所以我可以快速创建一个新的单例类,只是扩展模板单例类?如果重要的话,我正在使用ActionScript 3.0。
感谢。
答案 0 :(得分:7)
单例模式的设计使得类型不应该被继承。我不熟悉ActionScript,但是具有也可以扩展的单例类型似乎是一个错误。
如果您要执行此操作,那么这意味着父类型和子类型都可以将其单个实例加载到同一个应用程序中。由于类型是Parent
类型的多态,因此Parent
在技术上不再是单身。
答案 1 :(得分:5)
首先,我不能强调这一点 - 确保你使用单身人士不是Singleton as an antipattern。
我对ActionScript没有足够的了解,可以智能地对它进行评论,但通常将单例实例存储为类中的静态变量。这意味着您的子类将继承父级的静态变量,因此也是实例!因此,考虑到这一点,你将无法创建一个insta-singleton。
然而,你可以做的一件事就是制作一个Singleton界面,如果你的所有单身人士都需要一套通用的功能,例如干净卸载的析构函数等等。任何其他黑客都可以使这个工作(我能想到一个很少) - 我不确定我会告诉你,因为单身人士更好地使用(恕我直言),所以 ethical ethical 。
答案 2 :(得分:0)
flex框架将这种模式用于多个经理。
如果查看mx.core.Singleton的Flex代码,它的工作原理是将类名的映射维护到该类的实例。因此,在为单例创建第一个实例之前,您可以在层次结构中创建任何类的实例。
答案 3 :(得分:-1)
Singleton在类中定义,就像任何其他类一样,您可以根据需要扩展它(从它继承)。 Singleton的要点是实例化只有一次,它没有说继承。
问题是,这样做是否方便?如果您尝试,您将发现需要重新实现(覆盖)基类中定义的大多数行为。你也可以从头开始一个新课程。更好的方法是创建一个Singleton接口来定义所需的行为。
答案 4 :(得分:-1)
在Java中,在单例类中,构造函数是私有!因此,如果类X具有私有构造函数,如果您尝试在类Y中对其进行子类化,则编译器会说它无法调用X类的super()构造函数,因为它没有公共可见性。所以在Java中,我们不能对单例进行子类化,我想:/