单身人士的后果是麻烦

时间:2012-06-27 16:06:27

标签: design-patterns singleton

我正在使用GoF的书籍学习单身人士模式。当我读到它的结果时,我遇到了问题:

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

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

那么,有人能给我一些例子来帮助我理解这个问题吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

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

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

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