2009-04-27 63 views
1

有没有一种方法可以像模板单例类一样制作,以便在扩展它时扩展类也是单例类,所以我可以快速创建一个新的单例类,就像我扩展模板单例类一样?如果它很重要,我正在使用ActionScript 3.0。扩展单例类?

谢谢。

+0

我有点懒得为单例类编写重复的代码,所以我在eclipse中创建了一个templateclass。我可以找到并替换代码。 – 2012-02-08 11:37:53

回答

7

单例模式的设计方式是不应继承类型。我对ActionScript并不熟悉,但拥有一个也可以扩展的单例类型似乎是一个错误。

如果你这样做,那么这意味着父类型和子类型都可以将它们的单个实例加载到相同的应用程序中。由于Parent类型是多态的,因此Parent在技术上不再是单身。

+0

谢谢,我从来没有考虑过多态错误,我认为你是对的。谢谢。 – 2009-04-27 13:44:58

4

首先,我不能强调这一点 - 确保您使用的单例不是Singleton as an antipattern

我不太了解ActionScript对其进行智能评论,但通常单例实例会作为静态变量存储在类中。这意味着你的子类将继承父类的静态变量,因此也是实例!所以考虑到这一点,你将无法做出单身。

但是,你可以做的一件事就是创建一个Singleton接口,如果你所有的单例都需要一组通用的功能,例如清理卸载的析构函数等。任何其他的黑客可以使这个工作(我能想到的一些) - 我不知道这将是道德我告诉你,因为单身更好地使用稀疏(恕我直言)。

-1

Singleton和其他类一样在类中定义,并且可以根据需要扩展它(继承它)。单身人士的要点是实例化只有一次,它没有提到继承。

问题是,这样做是否方便?如果你尝试,你会发现你需要重新实现(重写)基类中定义的大部分行为。你不妨从头开始一个新课程。最好是创建一个Singleton接口来定义所需的行为。

0

flex框架将这种模式用于多个管理者。

如果您查看mx.core.Singleton的Flex代码,它通过将类名称映射到该类的实例来工作。因此,在为单例创建第一个实例之前,您可以创建层次结构中任何类的实例。

-1

在Java中,在单例类中,构造函数是private!所以,如果类X有一个私有构造函数,如果你试图在类Y中继承它,编译器会说它不能调用X类的super()构造函数,因为它没有公开的可见性。所以在Java中,我们不能分类为单例,我猜:/