2011-05-11 117 views
2

所以我刚钻入Singleton类,是的,我觉得他们很有帮助。我使用我的单身主要用于多个目标(视图,表等)的数据存储。话虽如此,我已经可以看到自己将在我的项目中实现很多单身人士。单身人士的后果

但是,很多单身人士会产生负面影响吗?从我读过的关于单身人士的事情可以看出,你为一个过程中的每个人创建了一个实例。其他类实例会从内存中释放(假设它们已正确释放),那么是否应该释放单例呢?

所以把它缩小到一个问题:有很多单身人士是否有害?

回答

1

单身人士没有规模。不管你想要什么认为应该是一个单身人士,当你的系统变大时,事实证明你需要不止一个。

如果你永远不需要超过一个,单身是好的。但是,随着系统规模的扩大,您通常需要在其自己的上下文中使用不止一个。

单身汉只是另一种说“全球”的方式。这并不坏,但一般来说,对于复杂性不断变化和增长的系统来说,这并不是一个好主意。

+0

嗯,我明白了你的观点。让我回答我自己的问题,谢谢你的评论! – 2011-05-11 20:58:42

1

从GOF的书:

的Singleton模式有几个好处:

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

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

  3. 许可改进操作和表示。 Singleton类可以被分类,并且使用这个扩展类的实例很容易配置一个应用程序 。您可以在运行时使用您需要的类的实例来配置 应用程序。

  4. 允许可变数量的实例。该模式使您可以轻松改变主意并允许Singleton的多个实例。此外,您可以使用相同的方法来控制应用程序使用的实例的编号 。只有授予 访问Singleton实例的操作需要更改。

  5. 比班级操作更灵活。另一种打包单例功能的方法是使用Singleton类可以被分类为 。类操作(即,C++ 中的静态成员函数或Smalltalk中的类方法)。但是这两种语言技巧使得很难将设计改变为允许多于一个实例的实例 。而且,C++中的静态成员函数永远不会是虚拟的,所以子类不能以多态方式覆盖它们。