代码之家  ›  专栏  ›  技术社区  ›  Night Walker

单例类的几个实例

  •  6
  • Night Walker  · 技术社区  · 16 年前

    我有一些类,它是一个单例类,我们已经在几个应用程序中有了这个类,它在那里用作单例。

    现在,我正在编写一些新的应用程序,我需要该类的几个实例,拥有七个实例的最佳实践是什么?

    通过从中派生并使私有建筑成为公共建筑,我与C合作。

    或者这里还有别的主意?

    谢谢

    7 回复  |  直到 16 年前
        1
  •  12
  •   NullUserException Mark Roddy    16 年前

    应该只有一个单人间。如果你有不止一个,那不是一个。

    也许是 Multiton 你想要什么?

        2
  •  13
  •   BoltClock    16 年前

    简单:不要把它变成单身。“单身”这个词存在是有原因的。

        3
  •  4
  •   Philip Regan    16 年前

    在我看来,如果您需要这个类的几个实例,那么您将像处理其他类一样处理它,并且您将删除类中强制它为单例的任何内容,然后它将不再是单例。

        4
  •  3
  •   Neil    16 年前

    您可以考虑一个工厂类,它可以配置为始终返回同一个实例,或者根据配置或其他条件为您提供不同的实例。

        5
  •  1
  •   Franci Penov    16 年前

    它实际上取决于类作为单例实现的具体程度。

    如果该类有一个私有的默认构造函数,并且该单实例是通过静态工厂方法创建的,那么您唯一的选择是从该类派生(只要它不是密封的),并在派生类上提供一个公共构造函数来创建多个实例。

    如果类有一个公共构造函数,而单例用法只是一个指导,但不是强制的,那么您可以创建尽可能多的实例。

    但是请注意,如果将类设计为单例,那么它的实现很可能会在内部作出这种假设,因此具有多个实例可能会产生意外的副作用。您真的应该确保类是实现的,这样就允许这样的使用场景。

        6
  •  1
  •   Stack Overflow is garbage    16 年前

    单例模式是一种设计模式,它为您提供两个保证:

    • 类的一个实例将存在,并且
    • 此实例是全局可访问的。

    如果您删除了第一个要求,那么您所拥有的就不再是一个单例。这是一种朴素的、老式的 全球的 .

    所以叫它真名吧。您需要的是一个简单的全局变量。如果需要的话,可以用某种懒惰的初始化逻辑包装它,但它是全局的,而不是单例的。

    除此之外, Singletons are a really really bad idea . 首先不要使用它们。

        7
  •  0
  •   STW    16 年前

    你所要求的是非常矛盾的——你能定义一下你所说的singleton是什么意思来确保我们没有使用不同的词汇表吗?

    如果现有对象是一个真正的静态单例对象,那么您可能无法实例化多个实例;为此,您需要在各自的实例中加载每个实例(及其调用方)。 AppDomain 这并不是一件小事,只是为了得到多个单件,这将是一个非常大的权衡/黑客。

    推荐文章