Singleton - 受保护与私有构造函数

Ron*_*n_s 12 c++ design-patterns

在设计单例时,为什么要构造构造protected而不是private?这基于我在网上看到的内容.

我们想控制那个类的实例数,公平,但为什么protected呢?不private会这样做吗?

Seb*_*fel 8

首先,在绝大多数情况下,单身人士都是个坏主意(为什么?).使用它们甚至比全局变量.

这样,子类可以实例化Singleton基类,在它自己的GetInstance()类型函数中将其作为自身的一部分返回.这就是它在设计模式中完成的原因.因此,如果你计划从Singleton继承,它只会真正相关.

GoF说,(第130页,对Singleton类进行子类化);

更灵活的方法使用单例注册表.Instance单例类可以在众所周知的注册表中按名称注册其单例实例,而不是定义可能的单例类集.

在使用单例注册表时,protected仍然需要基础Singleton中的构造函数(根据给出的实现)

简而言之; protected如果您计划从Singleton继承,请创建它.否则,请继续private.


Arm*_*yan 4

使用单例是不好的。时期。

也就是说,构造函数可以是私有的,没问题。但是,如果您想从您的单例派生另一个单例(就好像拥有一个单例还不够糟糕一样)怎么办?在这种情况下,派生类需要访问基单例构造函数。

  • 我真的很想对此+1,但是单身人士**在所有情况下**都不错。它们经常被滥用,但不要反对这种模式! (7认同)
  • @Ron_s:“cout”绝对是女性,我反对你对男性统治的假设。 (2认同)