2

所以我只是深入研究了 Singleton 类,是的,我发现它们很有帮助。我主要使用我的单例来存储多个目标(视图、表格等)的数据。话虽如此,我已经可以看到自己将在我的项目中实现很多单例。

但是很多单身人士会产生负面影响吗?从我所读到的关于单例的内容中,您可以在一个进程中为它们中的每一个创建一个实例。其他类实例从内存中释放(假设它们被正确释放),那么单例也应该被释放吗?

因此,将其缩小到一个问题:拥有大量单身人士是否有害?

4

2 回答 2

1

单例无法扩展。不管你认为应该是一个单例,当你的系统变得更大时,事实证明你需要的不止一个。

如果你从不需要超过一个,单例就可以了。但是,随着系统的扩展,您通常需要在其自身的上下文中使用不止一个。

单身人士只是说“全球”的另一种方式。这还不错,但一般来说,对于复杂性不断发展和增长的系统来说,这不是一个好主意。

于 2011-05-11T20:47:21.690 回答
1

来自 GOF 书:

单例模式有几个好处:

  1. 对唯一实例的受控访问。因为 Singleton 类封装了它的唯一实例,所以它可以严格控制客户端访问它的方式和时间。

  2. 减少名称空间。单例模式是对全局变量的改进。它避免了使用存储唯一实例的全局变量污染名称空间。

  3. 允许优化操作和表示。Singleton 类可以是子类,使用这个扩展类的实例配置应用程序很容易。您可以使用运行时所需的类的实例来配置应用程序。

  4. 允许可变数量的实例。该模式可以很容易地改变您的想法并允许 Singleton 类的多个实例。此外,您可以使用相同的方法来控制应用程序使用的实例数量。只有授予对 Singleton 实例的访问权限的操作需要更改。

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

于 2013-02-06T22:14:46.920 回答