【问题标题】:Singleton's consequence trouble辛格尔顿的后果问题
【发布时间】:2012-06-28 02:40:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • 那不是单身。只是一个包含不同类实例的静态列表。

标签: design-patterns singleton


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多