单身人士的替代品

Mir*_*pas 13 c++ design-patterns c++11

这与以下内容有关:单身人士有什么不好

你能给我一些例子,说明可以使用其他技术避免单身人士吗?我需要在C++中使用它,因此您可以使用C++特定技术提供示例.

更清楚:如何在没有单例的情况下实现文件管理器,资源管理器,日志管理器等.

Cal*_*leb 30

简单:创建文件管理器(或其他)类的单个实例,然后根据需要在应用程序内部传递它.很大程度上取决于您的应用程序结构,但通常您会有某种控制器对象在应用程序中创建其他重要对象.这可能是实例化文件管理器的对象,然后将其传递给它创建的需要文件管理器的其他对象.

如果你使用的是单例,因为某个类的实例必须不超过一个,这通常是可以的.如果您正在使用它,因为单例是一个全局可访问的对象,可以让您避免考虑其他对象如何相互通信以及每个对象负责的内容,那就是您开始遇到问题的地方.

文件管理器就是一个很好的例子.起初看起来应该只有零个或一个文件管理器对象的实例.但那有必要吗?你不能在一台机器上同时拥有两个文件系统吗?

  • +1表示强调"只有1"通常是因为短视而不是任何事情. (8认同)

Seb*_*ach 6

如何在没有单例的情况下实现文件管理器,资源管理器,日志管理器等.

通过不使它们成为单例并将它们作为参数和引用传递给调用树和对象网.

作为一般规则:如果您只需要n个实例,则只创建n个实例.

或者:如果一个精心设计的类的两个实例在不破坏类合同的情况下不会发生冲突,请不要将其设为单例.