在编码中,存在一个名为Singleton
的模式,将类的实例化限制为仅一个单个对象。但是,如果可以在模块级别上实例化一次类,例如,使用Singleton的原因是什么?用下划线命名并使用它?为什么以及何时应该使用Singleton?
具体而言(因为我的回答并不令人满意)这里有一个具体的例子。我指定一个标准的python类并创建一个实例:
class MyObject(object):
....
_myinstance = MyObject()
除了这个实现不会阻止创建第二个实例的事实,在什么情况下使用Singleton比这个简单的实现更好?
答案 0 :(得分:1)
当您想要重用一些昂贵的资源来创建资源时,Singleton模式非常有用。由于创建仅在应用程序的整个生命周期内执行一次,因此您只需支付一次价格。
答案 1 :(得分:1)
当资源在占用内存或创建时间方面很昂贵时,单例模式很有用。可以在单例模式中找到的另一种用法是,您可以根据应用程序要求限制类的实例数量,请记住的一个示例是与数据库的连接,您将始终在每个线程中建立一个连接,该连接通常与线程一起存活。
答案 2 :(得分:0)
Singleton本质上是一个概念,表明某个实体必须只有一个实例。单个实例的原因可能有所不同,这些是主要的:
答案 3 :(得分:0)
使用单身人士的原因取决于替代方案。
与在客户端代码中的某一点显式创建的对象相比,单个用户更容易从多个类,包,模块等访问。这有利但可以鼓励创建过度紧密耦合的代码。显式方法使依赖性更加清晰,但很难实现,尤其是在构建现有代码时。
我在实践中经常看到的单例的替代是“类”,它实际上是一个准全局变量的集合。与此相比,单例(或任何对象)是一个很大的改进,因为它限制了代码的不同部分之间的耦合,并且在测试其他类时更容易测试或替换为存根或模拟。并且它使得以后修改代码变得更容易以允许多个实例:在许多情况下,应该只有一个实例的要求并不是那么强大,这种灵活性可能很有用。
当重构使用一堆全局变量的现有代码时,单例可以是可实现的第一步,如果需要,可以进一步重构为显式创建的对象,并且值得付出额外的努力。
答案 4 :(得分:0)
由于这里的人已经很好地突出了你想要使用Singleton的原因,我想强调一下你有可能不应该使用它的原因。我最近在这个主题上发现了一篇很好的博文:http://misko.hevery.com/2008/08/21/where-have-all-the-singletons-gone/