所以我只是深入研究了Singleton类,是的,我发现它们非常有用。我使用我的单身主要用于多个目标(视图,表格等)的数据存储。话虽这么说,我已经可以看到自己要在我的项目中实现很多单身人士。
但很多单身人士会有负面影响吗?从我读到的关于单身人士的内容来看,你是在一个过程中为每个人创建一个实例。其他类实例从内存中释放(假设它们被正确释放),那么单例也应该被释放吗?
因此,将其缩小为一个问题:拥有大量单身人士是否有害?
答案 0 :(得分:1)
单身人士不会扩展。无论你认为什么应该是一个单身,当你的系统变大时,你需要不止一个。
如果你不需要一个以上,单身就可以了。但是,随着系统规模的扩大,您通常需要在其自己的上下文中使用多个任何。
单身人士只是说“全球化”的另一种方式。它并不坏,但总的来说,对于不断发展和复杂增长的系统来说,这不是一个好主意。
答案 1 :(得分:1)
来自GOF书:
Singleton模式有几个好处:
对唯一实例的受控访问。因为Singleton类封装了它的唯一实例,所以它可以严格控制 当客户访问它时。
减少名称空间。 Singleton模式是对全局变量的改进。它避免了使用全局污染名称空间 存储唯一实例的变量。
允许改进操作和表示。 Singleton类可以是子类,并且可以很容易地配置应用程序 使用此扩展类的实例。你可以配置 应用程序与运行时所需的类实例。
允许可变数量的实例。该模式可以轻松改变主意,并允许单个实例的多个实例 类。此外,您可以使用相同的方法来控制数量 应用程序使用的实例。只有授予的操作 对Singleton实例的访问需要改变。
- 醇>
比课堂操作更灵活。打包单例的功能的另一种方法是使用Singleton类 子类。类操作(即C ++中的静态成员函数) 或Smalltalk中的类方法)。但这两种语言技巧 难以更改设计以允许多个实例 ofclass。而且,C ++中的静态成员函数永远不会是虚拟的, 所以子类不能多态地覆盖它们。