2

我正在使用 GoF 的书学习单例模式。当我阅读它的后果时,我遇到了一个问题:

  • 比类操作更灵活封装单例功能的另一种方法是使用类操作(即 C++ 中的静态成员函数或 Smalltalk 中的类方法)。但是这两种语言技术都很难改变设计以允许一个类的多个实例。此外,C++ 中的静态成员函数永远不是虚拟的,因此子类不能多态地覆盖它们。

我真的不明白这个解释。我认为类操作(静态方法)也可以允许一个类的多个实例,如果我使用实例的静态列表,但我当然知道我错了。

那么,任何人都可以给我一些例子来帮助我理解这个问题吗?非常感谢!

4

1 回答 1

0

最初的想法是你在类中只使用静态成员,以及只对这些静态成员进行操作的静态方法,然后将类本身用作单例。不需要或不允许运行时实例化 - 如果你实例化任何东西,它是另一种类型(实例,而不是类。在 smalltalk 中,它是类的实例,而不是元类的实例)。

因此,如果您管理此类实例的列表,则不会创建此类型的多个实例;您已经创建了一个单例(类),其中包含非单例类型实例的列表。

从某种意义上说,每个类都是一个单例。只是由于文中提到的原因,在程序中使用一个作为单例对象通常不是一个好主意。

于 2012-06-27T16:44:17.867 回答